数据对象属性描述符是通过Object.defineProperty方法规定对象中的某一个值的使用规则
使用方法为:
Object.defineProperty(obj,'name', {
configurable:false,// 告诉js引擎,obj对象中的name不可以删除
enumerable:false,//告诉js引擎,obj对象的name属性不可枚举(for in /Object.keys)
writable:false, //告诉js引擎, obj对象的name属性不写入(只读属性 readonly)
value: 'coderwhy' // 告诉js引擎, 返回这个value
})
存储属性描述符比数据属性描述符多了两个关键字get和set
这两个关键字能够监听对象中值的改变从而执行函数中的内容
Vue2中的响应式使用的就是该原理
多个属性描述符:
Object.defineProperties(obj,{
name:{
configurable:true,
enumerable:true,
writable:false
},
age:{
}
})
额外补充:
1、获取属性描述符
console.log(Object.getOwnPropertyDescriptor(obj,‘name’));
console.log(Object.getOwnPropertyDescriptors(obj));
2、阻止对象的扩展
Object.preventExtensions(obj)
obj.address = ‘广州市’
console.log(obj);
3、密封对象(不能进行配置)
Object.seal(obj)
delete obj.name
console.log(obj);
4、冻结对象(不能进行写入)
Object.freeze(obj)
obj.name = ‘kobe’
console.log(obj);