我用Object.defineProperty
定义了一个对象属性。但那我怎么能解开呢?
我试图用delete foo.bar
取消它(其中bar
是属性),但似乎它不起作用:
var foo = {};
Object.defineProperty(foo, "bar", {
get: function () {
console.log("first call");
delete foo.bar;
var value = 3;
foo.bar = value;
return value;
}
, writeable: true
, enumerable: true
});
console.log(foo.bar);
console.log(foo.bar);
输出是:
first call
3
first call
3
我期待以下输出:
first call
3
3
我的想法是在第一个get
后我想用一个值替换属性。
如何做到这一点?
答案 0 :(得分:2)
将configurable
选项传递给defineProperty
功能,修复了问题:
var foo = {};
Object.defineProperty(foo, "bar", {
get: function () {
console.log("first call");
delete foo.bar;
var value = 3;
foo.bar = value;
return value;
}
, writeable: true
, enumerable: true
, configurable: true
});
console.log(foo.bar);
console.log(foo.bar);
输出:
first call
3
3
configurable
true
当且仅当此属性描述符的类型可能会被更改,并且该属性可能会从相应的对象中删除。默认为
false
。
答案 1 :(得分:0)
您需要设置可配置属性以允许删除configurable: true
但作为最佳实践,请不要混淆数据属性和访问者属性