以下代码执行无限循环(打印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
是什么原因造成的? (注意:我知道我宣布两个不同的吸气剂)。
答案 0 :(得分:1)
它不是无限循环,而是无限递归。您在this._age
的getter中返回_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
答案 1 :(得分:0)
每次从getter返回一个值时,你都会触发另一个getter
答案 2 :(得分:0)
你的第一个吸气器要求this._get
这会触发第二个吸气器,它要求this._get
触发第二个吸气器,它要求this._get
,这触发......你得到重点。