有人可以向我解释一下为什么这段简单的代码不起作用吗?
var user = {
get name() {
return this.name;
},
set name(value) {
this.name = value;
}
};
user.name = 'David';
当我将其放入 Firefox 21.0 的 Firebug 控制台时,出现以下错误:
InternalError: too much recursion
this.name = value;
为什么?在 Javascript 中定义 getter 和 setter 的正确方法是什么?
当您尝试设置name
,该函数将设置this.name = value
.
但该函数现在正在尝试设置name
。因此它将再次调用该函数并设置this.name
to value
.
但该函数现在正在尝试设置name
。因此它将再次调用该函数并设置this.name
to value
.
但该函数现在正在尝试设置name
。因此它将再次调用该函数并设置this.name
to value
.
....... 一段时间之后 .......
但该函数现在正在尝试设置name
。因此它将再次调用该函数并设置this.name
to value
.
但浏览器已确定调用堆栈太深,该函数调用自身的次数过多,因此为了防止完全崩溃,它会导致该函数失败并出现您看到的错误。
尝试使用不同的属性名称,例如this._name
,存储和检索值。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)