javascript - 在 JavaScript 中使用 "defineProperty"后重置对象属性 getter/setter

标签 javascript properties prototype

我想在使用“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/

相关文章:

javascript - Three.js OBJ 加载器不能在 codepen 上工作?

javascript - Select2 忽略某些输入?

java - 如何使用 spring 将所有属性读入数组?

c# - 属性永远不会为 null c#

将 Object 和 Class 组合在一起的 JavaScript mixin 会产生 TypeError

javascript - React : Map rendering component causing unnecessary re-renders, 子键 Prop 不起作用?

javascript - 如何重复 SVG 多个部分的关键帧动画?

javascript - 获取属性的值 - javascript

JavaScript - 如何创建原型(prototype)函数来打印所选元素中的文本?

javascript - 您应该如何从 Node 中的 EventEmitter 继承?