gpt4 book ai didi

javascript - 由于两个 getter 导致无限循环?

转载 作者:行者123 更新时间:2023-12-03 05:43:05 25 4
gpt4 key购买 nike

以下代码执行无限循环(打印 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com