以下代码执行无限循环(打印 getter1
一次,然后打印 getter2
直到停止):
var person1 = {
_age: 42,
get age() {
console.log("getter1");
return this._age;
}
};
Object.defineProperty(person1, "_age", {
get: function() {
console.log("getter2");
return this._age;
}
});
console.log(person1.age); // true
什么原因造成的? (注意:我知道我声明了两个不同的 setter/getter )。
最佳答案
这不是无限循环,而是无限递归。您在 _age
的 getter 内返回 this._age
,但访问 this._age
会再次隐式调用该 getter。
请注意,一旦定义了名为 _age
的 getter,_age
(42) 的旧值就会被覆盖。不再有值为 42
的属性。如果您想创建一个返回属性值的 getter,则它不能是同一属性的 getter,因此请将 getter 命名为 _age
之外的其他名称:
var person1 = {
_age: 42,
get age() {
console.log("getter1");
return this._age;
}
};
Object.defineProperty(person1, "age2", {
get: function() {
console.log("getter2");
return this._age;
}
});
console.log(person1.age); // 42
console.log(person1.age2); // 42
关于javascript - 由于两个 getter 导致无限循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40444138/