首页 > 解决方案 > 扩展类的属性,扩展类的 Getter。永远不会调用 Getter

问题描述

我正在使用Chrome 72中可用的新类公共字段声明,我遇到了这种真正奇怪的行为:

class Extended {
  property = 5;
}

class Extending extends Extended {
  get property() {
    return false;
  }
}

const extending = new Extending();

console.log(extending.property);
//logs 5

如果这是预期的结果,我会感到惊讶,因为它使get扩展类上的 ter 无法访问。这是一个错误吗?

标签: javascriptgoogle-chromeecmascript-6es6-classecmascript-next

解决方案


调用吸气剂。当您首先调用extending.property 时,将检查Extending 类的属性,如果在那里没有找到任何东西,那么它将在Extended 类中搜索属性,一旦找到它就会记录该属性的值。

让我们检查另外两个代码片段:

1.

class Extended {

}

class Extending extends Extended {
  get property() {
    return false;
  }
}

const extending = new Extending();

console.log(extending.property);
//logs false

此代码将打印到控制台 false,因为在 Extending 类和 Extended 类中都找不到属性,因此 getter 将返回 false 语句。

2.

class Extended {
  property = 5;
}

class Extending extends Extended {
      property = 6;
      get property() {
        return false;
      }
    }

const extending = new Extending();

console.log(extending.property);
//logs 6

这将打印 6 到控制台,因为在扩展类中找到了属性,它不会在扩展类中继续检查它


推荐阅读