欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

访问器属性

程序员文章站 2022-07-15 22:12:45
...

#访问器属性的设置
访问器属性是为了解决:开关的保护是死板的,不灵活的,法用自定义规则保护属性
注意:每个数据属性的缩微对象中都包含四个属性:
value: 属性值, //实际存储属性值
writable: true/false, //控制是否可修改当前属性的值
enumerable: true/false, //控制是否可被for in遍历到该属性的值——半隐藏
configurable: true/false
//控制是否可删除该属性
//控制是否可修改前两个开关

访问器属性的代码如下:

<script>
//创建一个对象
    var lilei={
        uname:"zhang",
        uage:"25",
        salary:25000,
    }
 //调用函数
    Object.defineProperties(lilei,{
        _uage:{
            value:lilei.uage,
            writable:true,
            enumerable:false,//这边默认的就是半隐藏的,遍历不到,如果想遍历到,必须将开关改为true
            configureable:false,
        },
        uage:{
            get:function(){
                return this._uage;
            },
            set:function(value){
                if(value>18&&value<65){
                    this._uage=value;
                }else{
                    console.log(`不能修改`);
                    throw Error("年纪超出范围")
                }
            },
            enumerable:false,
            configurable:false,
        },
      })
   lilei.uage=30;
    console.log(lilei.uage)
    console.log(lilei)
    for(var key in lilei){
        console.log(lilei[key])
    }
     </script>

这里面的get和set函数(名字不可更改,此处为定义好的函数),是对象直接调用的,且都是半隐藏属性,需要注意的是,这里添加的_uage属性,也是半隐藏的,是遍历不到的,但是可以通过点属性,访问到。
当试图获取uage的值时,自动调用get(),由于是对象直接调用,所以,this指向对象本身;
当试图修改uage的值时,自动调用set(),将实参传入,进行判断,不符合则报错。