我正在使用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
如果这是预期的结果,我会感到惊讶,因为它使扩展类上的get
ter不可访问。这是错误吗?
答案 0 :(得分:2)
将调用吸气剂。 当您首先调用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
由于在Extending类中找到了该属性,因此它将在控制台上打印6,它将不会在Extended类中继续对其进行检查