我想在使用“defineProperty”更改 getter/setter 后“重置”它们。
该示例的输出应该是 1 -> nope -> 1,但我只是得到“未定义”。
如何清除自定义 getter,以便它与 native 默认 getter 一起使用?
var obj = {
a: '1',
b: '2'
};
console.log(obj.a);
Object.defineProperty(obj, 'a', {
get: function(){ return 'nope'; },
configurable: true
});
console.log(obj.a);
Object.defineProperty(obj, 'a', {
get: undefined,
configurable: true
});
console.log(obj.a);
最佳答案
我不知道你如何在不克隆 obj 的情况下恢复到默认值 - 因为第一个 getter 本质上破坏了 'a' 的原始值;这与说 obj.a = 'nope'
相同。
这样的事情会起作用:
let obj = {
a: '1',
b: '2'
};
const objOrig = JSON.parse(JSON.stringify(obj))
console.log(obj.a);
Object.defineProperty(obj, 'a', {
get: function(){ return 'nope'; },
configurable: true
});
console.log(obj.a);
obj = JSON.parse(JSON.stringify(objOrig))
console.log(obj.a);
请注意,如果您需要删除 getter,则可以;
delete obj.a
但不会恢复到原来的声明;此时'a'丢失了。
关于javascript - 在 JavaScript 中使用 "defineProperty"后重置对象属性 getter/setter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59074561/