javascript - 扩展类的属性,扩展类的 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 无法访问。这是一个错误吗?
解决方案
调用吸气剂。当您首先调用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 到控制台,因为在扩展类中找到了属性,它不会在扩展类中继续检查它
推荐阅读
- java - Realm 中的 getDefaultInstance() 和 getInstance() 有什么区别?
- airflow - 气流任务的优先级未得到遵守
- python - 熊猫排名负整数和正整数,多列
- excel - 如何找到 2 个元素到 n 列的排列,每个行组合都是唯一的
- java - 如何在可视化代码 IDE 中调试 ANT + JAVA 项目
- angular - 无法在延迟加载的模块中动态导航 - Angular Dynamic Routing
- c - 谁提供了 C 标准库 gcc 或 glibc?
- android - 应用关闭时收不到 fcm 通知
- pyqt - 如何摆脱两个小部件之间的空白
- python - Python中ctypes.structure的序列化