【发布时间】:2017-10-06 01:16:55
【问题描述】:
On MDN 有一个示例显示用于对象初始化的 get 和 set:
var o = {
property: function ([parameters]) {},
get property() {},
set property(value) {}
};
没有任何示例说明如何使用该结构,我总是进入无限循环,例如:
var o = {
property: function (test) {return "test"},
get property() {return this.property;},
set property(value) {this.property = value;}
};
当我尝试访问名为 property 的对象属性时,会启动一个无限循环,我认为这是因为 get 在尝试读取它获取的属性时也会触发自身。
console.log(o.property); // infinite loop occurs
所以我假设我做错了,但在那种情况下,该网页上的示例不是很清楚。我找到的临时解决方案是将值保存在类似的属性中(例如_property),但我不想这样做并保持对象、getter 和 setter 的属性名称不变。
这可能吗?如果可以,如何正确地做到这一点?
【问题讨论】:
-
这不过是一个语法展示(而且是一个相当混乱的展示,显示了同名的数据和访问器属性)。对于实际示例,您应该阅读the guide
-
正确做什么?我不确定您的
o.property的预期行为是什么。 -
它应该返回属性
property具有的任何值,而无需进入无限循环,也无需更改属性名称或get 名称并设置为不同的名称(如_property) 来避免这个循环。 -
那么你需要一个简单的数据属性而不是 getter 或 setter。只需省略第二和第三行。
var o = { property(test) { return "test"; } }; o.test(); -
@Bergi 不,我想要示例中显示的内容,因为我想在分配或读取属性值时对其进行修改。
标签: javascript object initializer