20200917戚权
知识点:
-
四大特性
- value : 实际为属性保存的属性值
- writable : true/false控制是否可修改当前属性
- enumerable : true/false控制是否可用for in遍历这个属性
- configurable : ture/false控制两件事1. 是否可删除该属性2. 是否可修改前两个特性
注意:configurable一旦改为false,不可逆
-
获取一个属性的四大特性var attrs=Object.getOwnPropertyDescriptor(obj,"属性名")
-
请保镖,保镖要冒名顶替受保护属性的原属性名
Object.defineProperty(对象,”原属性名”,{ // 因为保镖不实际存储属性值,所以保镖没有value属性
// 又因为writable无法保护属性,才采用的保镖方式,所以保镖也没有writable属性
// 保镖一请就是一对儿
// 专门负责从受保护的原属性中获取属性值,交给外人
get:function(){
return this._原属性名
},
// 专门负责接受外部的新值,判断是否能修改进原属性中保存
set:function(value){
// value会自动接住外人给的新值
if(value符合条件){
// 如果value符合条件,才将新值value保存到原属性中
this._原属性名=value
}else{
// 否则如果新值不符合要求,则报错,且不修改原属性值
throw Error(“错误提示”)
}
},
// 保镖后要有 enumerable 和 configurable 两个开关
enumerable: true, // 保镖要代替原属性抛头露面
configurable: false, // 保镖不能轻易被删除
})
Object.defineProperty(book,"bage",{
get:function(){
return this._bage;
},
set:function(value){
// value会自用接住这次要赋的新值
if(value>=18 && value<=60){
this._bage=value;
}else{
throw Error("年龄超范围!")
}
},
configurable:false,
enumerable:true
})
点赞
评论