在JavaScript中使用“defineProperty”后重置对象属性getter/setter

在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

我想在使用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 };
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重新分配它就足够了。这样我就可以工作了。谢谢