在JavaScript中使用“defineProperty”后重置对象属性getter/setter
我想在使用defineProperty更改getter/setter之后重置它们 这个例子的输出应该是1->nope->1,但我只是没有定义 如何清除自定义getter,使其与本机默认getter一起使用 var obj={ a:‘1’, b:‘2’ }; console.logobj.a; Object.definePropertyobj,“a”{ get:函数{返回'nope';}, 可配置:true }; console.logobj.a; Object.definePropertyobj,“a”{ 获取:未定义, 可配置:true };在JavaScript中使用“defineProperty”后重置对象属性getter/setter,javascript,properties,prototype,Javascript,Properties,Prototype,我想在使用defineProperty更改getter/setter之后重置它们 这个例子的输出应该是1->nope->1,但我只是没有定义 如何清除自定义getter,使其与本机默认getter一起使用 var obj={ a:‘1’, b:‘2’ }; console.logobj.a; Object.definePropertyobj,“a”{ get:函数{返回'nope';}, 可配置:true }; console.logobj.a; Object.definePropertyob
console.logobj.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'在这一点上丢失了。谢谢,好主意!在我的例子中,obj非常复杂,无法以JSON的方式克隆它。但对我来说,只需克隆或存储obj.a值var a_clone=obj.a,然后使用delete obj.a并用obj.a=a_clone重新分配它就足够了。这样我就可以工作了。谢谢