Se si vuole una classe super per chiamare una funzione da una sottoclasse, il modo più pulito è quello di definire un modello astratto, in questo modo si conosce in modo esplicito il metodo esiste da qualche parte e deve essere ignorato da una sottoclasse.
Questo è un esempio, di solito non si chiama un metodo sub all'interno del costruttore come istanza secondaria non è ancora inizializzato ... (motivo per cui si dispone di un "indefinito" nell'esempio di tua domanda)
abstract class A {
// The abstract method the subclass will have to call
protected abstract doStuff():void;
constructor(){
alert("Super class A constructed, calling now 'doStuff'")
this.doStuff();
}
}
class B extends A{
// Define here the abstract method
protected doStuff()
{
alert("Submethod called");
}
}
var b = new B();
Test it Here
E se proprio come @Max si vuole davvero evitare di implementare il metodo astratto ovunque, basta sbarazzarsi di esso. Non consiglio questo approccio perché potresti dimenticare che stai ignorando il metodo.
abstract class A {
constructor() {
alert("Super class A constructed, calling now 'doStuff'")
this.doStuff();
}
// The fallback method the subclass will call if not overridden
protected doStuff(): void {
alert("Default doStuff");
};
}
class B extends A {
// Override doStuff()
protected doStuff() {
alert("Submethod called");
}
}
class C extends A {
// No doStuff() overriding, fallback on A.doStuff()
}
var b = new B();
var c = new C();
Provalo Here
fonte
2017-06-30 14:44:17
Calling metodo virtuale nel costruttore è considerato una cattiva pratica in qualsiasi linguaggio OOP: https://google.com/search?q=virtual+method+in+constructor –