gpt4 book ai didi

javascript - 取消设置并为使用 defineProperty 定义的属性设置新值

转载 作者:行者123 更新时间:2023-11-29 21:53:39 25 4
gpt4 key购买 nike

我用 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 之后,我想用一个值替换该属性。

如何做到这一点?

最佳答案

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

来自 documentation :

configurable

true if and only if the type of this property descriptor may be changed and if the property may be deleted from the corresponding object.

Defaults to false.

关于javascript - 取消设置并为使用 defineProperty 定义的属性设置新值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27633461/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com