2017-11-14 4 views
1

Ich habe eine abstrakte Klasse, die ein Verfahren aussetzt:Wie erreicht man 'this' in überschriebenen Methode?

public abstract class Foo { 
    public update(){ 
     //do some stuff 
    } 
} 

Welche dieser Klasse erbt von:

public class Doo extends Foo { 
    public update(){ 
     super.update(); 
     const x = this.getValue(); //problem line 
    } 
} 

Jetzt, da update() ausgesetzt ist, ist es in einem anderen Kontext ausgeführt wird, und so, dass this auf der "Problem-Linie" verweist auf das aufrufende Objekt, ein Problem, das ich normalerweise lösen würde, indem update() in der abstrakten Eltern als Pfeil-Methode zu deklarieren:

public class Foo { 
    public update =() => { 
     //call this all i want 
    } 
} 

Wenn ich dies jedoch tun, kann ich super() nicht mehr aus der Kindklasse aufrufen. Gibt es eine Möglichkeit super.update()anzurufen und die Kontrolle über this zu behalten?

Antwort

1

Leider ist das Beste, was Sie tun können, zwei Methoden zu erstellen - eine für das Überschreiben und eine für die Öffentlichkeit. Setzen Sie die Implementierung in die überschreibende Methode, so wie Sie sie haben, und legen Sie eine separate Methode mit Pfeilfunktionen offen, die this.otherMethod() aufruft. Auf diese Weise erhalten Sie this für die öffentliche Methode und Bewahren super für die Implementierung.

Dies ist nicht wirklich ein TypScript-Problem, sondern ein JavaScript.

+1

Gerade wenn du denkst, dass du von all den Übeln von VanillaJS weggekommen bist, '' '' kommt zurück, um dich zu verfolgen ... Danke, dann denke ich, dass ich mit einer weniger eleganten Lösung kommen werde. – jokulmorder

+0

Einverstanden, ich bin irgendwie überrascht, dass dies nicht behoben wurde, wenn Klassen hinzugefügt wurden - ein Mechanismus, um dies automatisch an Klassenmethoden zu binden und trotzdem super Arbeit zu leisten. Ich bin mir nicht sicher, ob das Polyfilled sein kann, aber es muss irgendwann behoben werden. –

Verwandte Themen