两个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