在RangeError中使用`Object.defineProperty`

时间:2014-05-29 16:41:40

标签: javascript

我尝试使用Object.defineProperty更新我的obj对象,以便在get上拥有setobj.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.definePropertyget的{​​{1}}媒体资源中添加setname个访问者?

http://jsfiddle.net/kman007_us/ZwYp6/

2 个答案:

答案 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中的属性。您已经创建了一个永不退出的递归函数调用。