javascript - 扩展类的属性,扩展类的 Getter。永远不会调用 Getter

标签 javascript google-chrome ecmascript-6 es6-class ecmascript-next

我正在使用新的 Class Public Field Declarations可用 Chrome 72我遇到了这种真正奇怪的行为:

class Extended {
  property = 5;
}

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

const extending = new Extending();

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

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

最佳答案

setter/getter 被调用。 当您首先调用 extending.property 时,将检查 Extending 类的属性,如果在那里找不到任何内容,那么它将在 Extended 类中搜索属性,一旦找到它就会记录该属性的值。

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

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,它不会继续在扩展类中检查它

关于javascript - 扩展类的属性,扩展类的 Getter。永远不会调用 Getter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56508042/

相关文章:

javascript - 类型错误 : Number is not a function - when trying to use Google Maps API V3 DirectionsService

javascript - 使用JS提交时防止多次表单提交

javascript - 使用二维码启动应用程序或重定向到网页

google-chrome - 有没有办法在 Google Chrome 中获取 XPath?

google-chrome - Mac OS X - 接受自签名多域 SSL 证书

javascript - 如何在 ES6 中解构为动态命名的变量?

javascript - 如何在鼠标悬停事件的圆环图上显示文本

javascript - Web Worker 在 webkit 中的行为与 Firefox 不同

javascript - ES6 import "module"不允许访问 "module"的函数

javascript - 为数据表的所有列构造状态对象以进行排序: React JS