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
意思是get/set和value不能同时设置,从逻辑的角度看他们也是互斥的
get方法不断访问object[key],也就是get方法本身,所以会无限嵌套导致栈溢出