繁体   English   中英

在RangeError中使用`Object.defineProperty`

[英]Using `Object.defineProperty` with RangeError

我正在尝试使用Object.defineProperty来更新我的obj对象,以便在obj.name上有一个getset访问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.definePropertyobjname属性上添加getset访问器?

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

当你得到obj.nameget调用get函数,它返回this.name的值。
当你得到this.nameget调用get函数,它返回this.name的值。
当你得到this.nameget调用get函数,它返回this.name的值。
当你得到this.nameget调用get函数,它返回this.name的值。
当你得到this.nameget调用get函数,它返回this.name的值。
当你得到this.nameget调用get函数,它返回this.name的值。
当你得到this.nameget调用get函数,它返回this.name的值。
当你得到this.nameget调用get函数,它返回this.name的值。
当你得到this.nameget调用get函数,它返回this.name的值。
当你得到this.nameget调用get函数,它返回this.name的值。
当你得到this.nameget调用get函数,它返回this.name的值。
当你得到this.nameget调用get函数,它返回this.name的值。
当你得到this.nameget调用get函数,它返回this.name的值。
当你得到this.nameget调用get函数,它返回this.name的值。
当你得到this.nameget调用get函数,它返回this.name的值。
当你得到this.nameget调用get函数,它返回this.name的值。
当你得到this.nameget调用get函数,它返回this.name的值。
当你得到this.nameget调用get函数,它返回this.name的值。
当你得到this.nameget调用get函数,它返回this.name的值。
当你得到this.nameget调用get函数,它返回this.name的值。
当你得到this.nameget调用get函数,它返回this.name的值。
当你得到this.nameget调用get函数,它返回this.name的值。
当你得到this.nameget调用get函数,它返回this.name的值。
当你得到this.nameget调用get函数,它返回this.name的值。
当你得到this.nameget调用get函数,它返回this.name的值。
当你得到this.nameget调用get函数,它返回this.name的值。
当你得到this.nameget调用get函数,它返回this.name的值。
当你得到this.nameget调用get函数,它返回this.name的值。
未捕获RangeError:超出最大调用堆栈大小。


尝试return this.__name; this.__name = x; 代替。

您无法使用与使用Object.defineProperty定义的属性相同的名称访问getter或setter中的属性。 您创建了一个永不退出的递归函数调用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM