有人可以帮助我理解' _' javascript的setter和getter中的字符。例如,我有以下代码可以正常工作。
var user = {
get name() {
return this._name;
},
set name(value) {
this._name = value;
}
};
var me = user;
me.name = "Rob";
alert(me.name);
但是如果我删除了下划线,那么我的代码将如下所示,那么我的代码将无法正常工作,我在浏览器控制台中出现错误,指出" RangeError:超出了最大调用堆栈大小。 "
var user = {
get name() {
return this.name;
},
set name(value) {
this.name = value;
}
};
var me = user;
me.name = "Rob";
alert(me.name);
</script>
有人可以向我解释一下&#34; _&#34;在这种情况下呢?
答案 0 :(得分:7)
这很简单。在第二个示例中,get
会自行调用。
由于您引用了属性me.name
,因此JavaScript需要get
该属性。发生这种情况时,会触发吸气剂。使用你的第二个例子,JavaScript调用getter,然后告诉getter做同样的事情:获取它要处理的属性。该函数始终调用自身,使其无限递归。
但是,在第一个示例中,在getter中检索的属性与最初触发getter的属性不同。由getter检索的值在某种程度上是一个存储组件,以避免上面提到的递归问题。这两个属性之间没有实际的连接,即使它们具有相似的名称。
同样的想法适用于setter。
答案 1 :(得分:3)