如果要让超类从子类中调用函数,最干净的方法是定义一个抽象模式,以这种方式,您明确地知道该方法存在于某处,并且必须被子类覆盖。
这是一个示例,通常您不会在构造函数内调用子方法,因为该子实例尚未初始化……(原因为何您的问题示例中存在“未定义”)
abstract class A {
protected abstract doStuff():void;
constructor(){
alert("Super class A constructed, calling now 'doStuff'")
this.doStuff();
}
}
class B extends A{
protected doStuff()
{
alert("Submethod called");
}
}
var b = new B();
在这里测试
如果像@Max这样,您真的想避免在任何地方实现抽象方法,那就摆脱它。我不推荐这种方法,因为您可能会忘记自己正在覆盖该方法。
abstract class A {
constructor() {
alert("Super class A constructed, calling now 'doStuff'")
this.doStuff();
}
protected doStuff(): void {
alert("Default doStuff");
};
}
class B extends A {
protected doStuff() {
alert("Submethod called");
}
}
class C extends A {
}
var b = new B();
var c = new C();
在这里尝试