【发布时间】:2018-06-30 15:21:13
【问题描述】:
我有一个如下所示的基类:
class Speaker {
sayHi() {
if (this.isLoud) {
console.log('HI');
} else {
console.log('hi');
}
}
}
还有一个看起来像这样的子类:
class LoudSpeaker extends Speaker {
}
LoudSpeaker.isLoud = true;
... 最后一行是尝试在 ES6 中创建类变量。问题是当我实例化LoudSpeaker 并调用sayHi 时,isLoud 变量是未定义的。是否可以从父类访问子类的类变量?
【问题讨论】:
-
您错过了添加
class LoudSpeaker extends Speaker吗? -
好吧,你可以改用模板模式,并有一个子类可以覆盖的方法?
-
@MaazSyedAdeeb 是的,感谢您指出这一点。我刚刚更正了。
-
LoudSpeaker.isLoud- 这是在“class”对象上设置属性,而不是实例。this.isLoud正在尝试访问“实例”的属性。如果方法也访问了LoudSpeaker.isLoud属性,则代码“可以工作”。 -
@edpaez 就该方法而言,将有几十个具有基本相同功能的子类。想象一下
RedLoudSpeaker、BlueLoudSpeaker等。我试图避免每次都重写它们......