对象的属性描述
ES5开始加入了对象属性:value(值) writable(可写)、 enumerable(可枚举)和 configurable(可配置)。
定义一个 var obj1={x:1}
通过调用Object.getOwnPropertyDescriptor(obj1,x)获取属性描述
{
value: 1,
writable: true,
enumerable: true,
configurable: true
}
当把writable设置为false时 :
var obj1={}
Object.defineProperty(obj1,'x',{
value: 1,
writable: false,
enumerable: true,
configurable: true
}
obj.x=2;
console.los(obj.x) //1
再去改变obj.x是无效的
当把enumerable设置为false时:
var obj1={};
var hasX={}
Object.defineProperty(obj1,'x',{
value: 1,
writable: true,
enumerable: false,
configurable: true
})
for(var i in obj1){
hasX[i]=i;
}
console.log(hasX) //{}空对象
设置了enumerable为false就无法通过遍历获取对象属性
当把configurable设置为false时:
Object.defineProperty(obj1,'x',{
value: 1,
writable: true,
enumerable: true,
configurable: false
})
Object.defineProperty(obj1,'x',{
value: 1,
writable: true,
enumerable: false,//修改
configurable: false
}) //报 TypeError错误
obj1.x=2;
obj1.x //2
delete obj1.x
obj1.x //2
当设置configurable为false时,是单向设置无法撤销的操作,修改属性描述法的时候会产生一个TypeError的错误,也不可以删除该属性,但是可以去设置它的value
以下的方法是对对象进行操作的:
Object.preventExtensions 对象禁止扩展属性
var obj1= {
a:2
};
Object.preventExtensions( obj1);
obj1.b = 3;
obj1.b; // undefined
Object.seal 对象密封
在禁止扩展的同事标记configurable为false
Object.freeze 冻结
在Object.seal基础上再设置writable为false 无法修改对象的属性的值
浙公网安备 33010602011771号