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

标签 javascript properties accessor

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

相关文章:

qt - `Screen.pixelDensity` 在非可视组件中等于 0

java - 使用 Java 7 Update 45,不再从 JNLP 标记 "Property"设置系统属性

ruby - 如何做真正的只读属性(accessors => attributs)

用于不存在记录的 Haskell 访问器

javascript - 使用 Angular Directive(指令)在页面加载时重新缩放和裁剪图像

javascript - 滑动菜单,如何同时滑入和滑出?

javascript - 在网站上创建一个链接以发布到 "ifttt.com"但保留在我的网站上

java - 修改META-INF中的属性文件

matlab - 在 MATLAB 中重写子类中的父类(super class)属性设置方法

javascript - mturk 上的外部 HIT 与内联 HIT?