我尝试使用Object.defineProperty
更新我的obj
对象,以便在get
上拥有set
和obj.name
访问者。
var obj = {};
Object.defineProperty(obj, 'name', {
get: function() { return this.name; },
set: function(x) { this.name = x; }
});
console.log("obj:", obj);
console.log("obj.name:", obj.name);
但我得到Uncaught RangeError: Maximum call stack size exceeded
。
如何使用Object.defineProperty
在get
的{{1}}媒体资源中添加set
和name
个访问者?
答案 0 :(得分:5)
当您获得obj.name
时,会调用get
函数,该函数返回this.name
的值。
获得this.name
后,将调用get
函数,该函数将返回this.name
的值。
获得this.name
后,将调用get
函数,该函数将返回this.name
的值。
获得this.name
后,将调用get
函数,该函数将返回this.name
的值。
获得this.name
后,将调用get
函数,该函数将返回this.name
的值。
获得this.name
后,将调用get
函数,该函数将返回this.name
的值。
获得this.name
后,将调用get
函数,该函数将返回this.name
的值。
获得this.name
后,将调用get
函数,该函数将返回this.name
的值。
获得this.name
后,将调用get
函数,该函数将返回this.name
的值。
获得this.name
后,将调用get
函数,该函数将返回this.name
的值。
获得this.name
后,将调用get
函数,该函数将返回this.name
的值。
获得this.name
后,将调用get
函数,该函数将返回this.name
的值。
获得this.name
后,将调用get
函数,该函数将返回this.name
的值。
获得this.name
后,将调用get
函数,该函数将返回this.name
的值。
获得this.name
后,将调用get
函数,该函数将返回this.name
的值。
获得this.name
后,将调用get
函数,该函数将返回this.name
的值。
获得this.name
后,将调用get
函数,该函数将返回this.name
的值。
获得this.name
后,将调用get
函数,该函数将返回this.name
的值。
获得this.name
后,将调用get
函数,该函数将返回this.name
的值。
获得this.name
后,将调用get
函数,该函数将返回this.name
的值。
获得this.name
后,将调用get
函数,该函数将返回this.name
的值。
获得this.name
后,将调用get
函数,该函数将返回this.name
的值。
获得this.name
后,将调用get
函数,该函数将返回this.name
的值。
获得this.name
后,将调用get
函数,该函数将返回this.name
的值。
获得this.name
后,将调用get
函数,该函数将返回this.name
的值。
获得this.name
后,将调用get
函数,该函数将返回this.name
的值。
获得this.name
后,将调用get
函数,该函数将返回this.name
的值。
获得this.name
后,将调用get
函数,该函数将返回this.name
的值。
未捕获RangeError:超出最大调用堆栈大小。
请尝试return this.__name;
和this.__name = x;
。
答案 1 :(得分:3)
您无法使用与Object.defineProperty
定义的属性相同的名称访问getter或setter中的属性。您已经创建了一个永不退出的递归函数调用。