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>
在这种情况下“_”会做什么?
这很简单。在第二个示例中,
get
会调用自身。
由于您引用了属性
me.name
,JavaScript 需要 get
该属性。当这种情况发生时,吸气剂就会被触发。使用第二个示例,JavaScript 调用 getter,但随后 getter 被告知执行完全相同的操作:获取它要处理的属性。该函数总是调用自身,使其无限递归。
但是,在第一个示例中,在 getter 中检索的属性与最初触发 getter 的属性不同。 getter 检索的值在某种程度上是一个存储组件,以避免上述递归问题。尽管名称相似,但这两个属性之间没有实际联系。
同样的想法也适用于 setter。