Object.defineProperty的错误

const obj = {
  name: "allen",
  address: {
    country: "china",
    city: "beijing",
  },
  habits: ["读书", "写字"],
};

for (let key in obj) {
  Object.defineProperty(obj, key, {
    value: obj[key],
    set: (newValue) => {
      console.log(`${key}改变了:${obj[key]}=>${newValue}`);
    },
    get: () => obj[key],
  });
}

报错1:

TypeError: Invalid property descriptor. Cannot both specify accessors and a value or writable attribute

报错2:

RangeError: Maximum call stack size exceeded
阅读 3.1k
2 个回答
TypeError: Invalid property descriptor. Cannot both specify accessors and a value or writable attribute

意思是get/set和value不能同时设置,从逻辑的角度看他们也是互斥的

RangeError: Maximum call stack size exceeded

get方法不断访问object[key],也就是get方法本身,所以会无限嵌套导致栈溢出

value和get/set只能取其一

不熟悉的API请看官方文档

image.png

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题