两个getter造成的死循环?
An infinite loop caused because of two getters?
下面的代码执行一个无限循环(打印 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
是什么原因造成的? (注意:我知道我声明了两个不同的吸气剂)。
每次你 return 一个 getter 的值,你就会触发另一个 getter
您的第一个 getter 要求 this._get
这会触发第二个 getter,后者要求 this._get
触发第二个 getter,这会要求对于 this._get
,这会触发...您明白了。
不是无限循环,而是无限递归。您在 getter 中 return this._age
for _age
,但访问 this._age
隐式再次调用 getter。
请注意,一旦您定义了一个名为 _age
的 getter,_age
(42) 的旧值将被覆盖。不再有值为 42
的 属性。如果你想创建一个 return 是 属性 的值的 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
下面的代码执行一个无限循环(打印 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
是什么原因造成的? (注意:我知道我声明了两个不同的吸气剂)。
每次你 return 一个 getter 的值,你就会触发另一个 getter
您的第一个 getter 要求 this._get
这会触发第二个 getter,后者要求 this._get
触发第二个 getter,这会要求对于 this._get
,这会触发...您明白了。
不是无限循环,而是无限递归。您在 getter 中 return this._age
for _age
,但访问 this._age
隐式再次调用 getter。
请注意,一旦您定义了一个名为 _age
的 getter,_age
(42) 的旧值将被覆盖。不再有值为 42
的 属性。如果你想创建一个 return 是 属性 的值的 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