在ECMAScript 5中,属性值可以用一个或两个方法代替,这两个方法就是getter和setter
var man = { name : 'lidg', weibo : '@lidg', get age(){ return new Date().getFullYear() - 1998; }, set age(val){ console.log('Age can\'t be set to ' + val); } } console.log(man.age); //20 man.age = 100; //Age can't be set to 100 console.log(man.age); //35
利用它们可以实现对数据的访问限制。
var man = { name : 'lidg', $age : null, //$只是表示该属性值不想暴露在外面,没有特殊含义 weibo : '@lidg', get age(){ if(this.$age == undefined){ //不是严格等于,null等于undefined return new Date().getFullYear() - 1998; }else{ return this.$age; } }, set age(val){ //将val转为数字 //如果val本身就是数字则什么都不做,如果不是则返回NaN val =+ val; if(!isNaN(val)&&val>0&&val<150){ this.$age =+ val; }else{ throw new Error("Incorrect val :" + val); } } } console.log(man.age); //20 man.age = 100; console.log(man.age); //100 man.age = 'abc'; //error: Incorrevt val: NaN