var a=10;
console.log(Object.getOwnPropertyDescriptor(window,'a'));
configurable 是否可删除
enumerable 是否可遍历
writable 是否可修改
使用属性描述符setter、getter
1、只定义getter函数 静默失败,严格模式会报错
2、只定义setter函数 获取属性值为undefined
var obj={
a: 22,
get bb(){
return this.a
},
set bb(val){
this.a=val*2
}
}
console.log(Object.getOwnPropertyDescriptor(obj,'a'))
console.log(Object.getOwnPropertyDescriptor(obj,'bb'))
console.log(obj)
Object.isExtensible(obj) //查看对象obj是否可以拓展
Object.preventExtensions(obj) //设置obj不可以拓展
Object.seal(obj); //封印对象
Object.isSealed(obj);//判断是否被封印
isFrozen/freeze
对象的拓展:不允许增加属性
对象的封印:不允许增加属性、不允许删除属性
对象的冻结::不允许增加属性、不允许删除属性、不允许修改属性
深度冻结对象
function myFreeze(obj) {
Object.freeze(obj);
for(var key in obj){
if(typeof obj[key]==="object"&&obj[key]!==null){
myFreenze(obj[key]);
}
}
}