Hello World,
我有一个window.foo
对象,其中包含属性bar=1
和qux=2
我需要将它们冻结并且不可重复。
使用此代码很容易:
var foo = {};
Object.defineProperty(foo,"bar",{ "value":1 });
Object.defineProperty(foo,"qux",{ "value":2 });
但window.foo={"bar":3};
可以轻易覆盖这一点。
有什么办法吗?
谢谢:)
答案 0 :(得分:2)
//non-writable window.foo
Object.defineProperty(window,"foo",{
"enumerable":true,
"value":{}
});
//Non-writable foo.bar
Object.defineProperty(window.foo,"bar",{
"enumerable":true,
"value":1
});
//Non-writable foo.qux
Object.defineProperty(window.foo,"qux",{
"enumerable":true,
"value":2
});
就在这里! :)
谢谢你的帮助。
答案 1 :(得分:0)
不,但您可以定义所有当前属性,使其不可写且不可配置,这将完成相同的任务。
Object.prototype.freezeAllCurrentProperties = function() {
for(i in this) {
if(this.hasOwnProperty(i)) {
Object.defineProperty(this,i,{writable:false,configurable:false});
}
}
}
var x = {'firstProp':'a string'};
x.freezeAllCurrentProperties();
delete x['firstProp']; //returns false (thanks to configurable:false)
x['firstProp'] = false; //doesn't change (thanks to writable:false)
x.newProp = true; //adds newProp to x