访问器属性
程序员文章站
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(),将实参传入,进行判断,不符合则报错。
下一篇: 访问器属性