寻找薛定谔的猫

导航

 

在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

 

posted on 2018-07-03 10:33  teagueli  阅读(332)  评论(0编辑  收藏  举报