【发布时间】:2017-01-23 10:11:00
【问题描述】:
我想使用 Object.defineProperty() 将数据属性转换为访问器属性。考虑导致Uncaught RangeError: Maximum call stack size exceeded错误的代码
var c = { name: 'abcde'};
Object.defineProperty(c, 'name', {
get: function() {
return this.name; //causes stack overflow
},
set: function(x) {
this.name = x; //causes stack overflow
}
});
c.name="xyz";
console.log(c.name);
我明白为什么会出现错误。 建议的解决方案之一是从 getter 和 setter 中删除“this”,它似乎有效。
var c = { name: 'abcde'};
Object.defineProperty(c, 'name', {
get: function() {
return name; //removed this
},
set: function(x) {
name = x; //removed this
}
});
c.name="xyz";
console.log(c.name);
发生了什么?一般来说,我想问如何使用 Object.defineProperty() 将数据属性转换为访问器属性?
【问题讨论】: