Soh*_*azi 7 javascript recursion getter-setter
有人可以帮助我理解"_"字符在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);
Run Code Online (Sandbox Code Playgroud)
但是,如果我删除下划线,所以我的代码将如下所示,那么我的代码将无法工作,我在浏览器控制台中收到一条错误,指出"RangeError:超出最大调用堆栈大小".
var user = {
get name() {
return this.name;
},
set name(value) {
this.name = value;
}
};
var me = user;
me.name = "Rob";
alert(me.name);
</script>
Run Code Online (Sandbox Code Playgroud)
有人可以向我解释在这种情况下"_"的作用是什么吗?
这很简单.在你的第二个例子中,get自称.
由于您引用了该属性me.name,因此JavaScript需要get该属性.发生这种情况时,会触发吸气剂.使用你的第二个例子,JavaScript调用getter,然后告诉getter做同样的事情:获取它要处理的属性.该函数始终调用自身,使其无限递归.
但是,在第一个示例中,在getter中检索的属性与最初触发getter的属性不同.由getter重新获取的值在某种程度上是一个存储组件,以避免上面提到的递归问题.这两个属性之间没有实际的连接,即使它们具有相似的名称.
同样的想法适用于setter.
它是用于标识私有变量或属性的命名约定。该_有JS没有迹象特别重要的意义。
来自 Airbnb JavaScript风格指南:
命名私有属性时使用前导下划线 _。
https://github.com/airbnb/javascript#22.4