我正在使用Chrome 72中提供的新Class Public Field Declarations,我遇到了一个非常奇怪的行为:
class Extended {
property = 5;
}
class Extending extends Extended {
get property() {
return false;
}
}
const extending = new Extending();
console.log(extending.property);
//logs 5如果这是预期的结果,我会感到惊讶,因为它使得扩展类上的getter不可访问。这是一个bug吗?
发布于 2019-06-09 00:42:21
getter被调用。当你第一次调用extending.property时,将检查扩展类的属性,如果没有找到任何东西,它将在扩展类中搜索属性,一旦找到,它将记录属性的值。
让我们来看看另外两个代码片段:
1.
class Extended {
}
class Extending extends Extended {
get property() {
return false;
}
}
const extending = new Extending();
console.log(extending.property);
//logs false这段代码将打印到控制台false,因为在扩展类和扩展类中都找不到属性,那么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打印到控制台,因为在扩展类中发现了属性,它不会一直在扩展类中检查它
https://stackoverflow.com/questions/56508042
复制相似问题