Ist es möglich, Typoskripte zu zwingen, Methoden auf die Instanz zu setzen, nicht auf den Prototyp? Ich frage das, weil ich häufig "diesen" Bereich Probleme habe, mit denen Methoden auf dem Prototyp Probleme verursachen.
Bearbeiten
Zum Beispiel in der Ausgabe von den ts scheint es inkonsistent, ich halte das FooAlert in der FooViewModel-Funktion, aber die Methode openFooAlertDialogueAdd im Prototyp
Js
%Vor%Ts
%Vor%Wenn Sie Probleme mit dem Oszilloskop haben, fühle ich mich schlecht für Sie, mein Sohn, ich habe 99 Probleme, aber das ist nicht eins!
Steves Antworten zeigen die korrekte Methode zum Definieren von Klassenmethoden, Methoden, die in jeder Instanz verfügbar gemacht werden. Wenn jedoch Probleme mit dem Oszilloskop auftreten, liegt dies wahrscheinlich daran, dass Sie diese Methoden aus einem anderen Kontext aufrufen.
Wenn Sie beispielsweise Knockout verwenden und eine dieser Methoden an eine click
-Bindung binden, überschreibt Knockout den Bereich auf den aktuellen Bereich der Bindung, NICHT auf den Bereich, für den Sie die Methode definiert haben.
Es gibt zwei Optionen, um diesen Verlust des Gültigkeitsbereichs zu verhindern.
Erstens können Sie Ihre Methoden im Konstruktor definieren, um sie für die Instanz anstatt für den Prototyp verfügbar zu machen.
Wie:
%Vor% Zweitens könnten Sie die =>
-Syntax verwenden, um Ihre Klassenmethoden zu definieren.
Beispiel:
%Vor%Die Methoden für den Prototyp sind die Methoden, die für jede Instanz verfügbar sind.
%Vor% Für jede Instanz werden die someProperty
und method()
auf ihren Prototyp kopiert. Sie können dies überprüfen mit:
Nur wenn die Instanz über keine eigene Eigenschaft verfügt, wird JavaScript jede Abhängigkeitskette durchlaufen, um die Eigenschaft in einer Klasse oberhalb der Abhängigkeitskette zu finden.
Wenn Sie den Code, mit dem Sie Probleme haben, mit dem Bereich this
angeben, können wir Ihnen sicherlich helfen, das Problem zu beheben.
Es sieht so aus, als ob es sich um ein TypeScript / Knockout-Problem handelt, wie @Anzeo in seiner Antwort und in der Bearbeitung darauf hingewiesen hat. Ich habe das Problem gelöst, indem ich meine Methodendeklarationen in den Konstruktor eingefügt habe, aber auch die var self = this;
-Konvention verwendet habe, die im Abschnitt "Verwalten dieses" auf Knockouts Berechnete Beobachtbare Dokumentation . Ihr TS-Code könnte so aussehen:
Unabhängig davon, welche Änderungen am Umfang vorgenommen werden, verhindert die JavaScript-Sperrung um self
, dass Sie sich Sorgen machen müssen, dass this
sich ändert. Das sollte beide Probleme lösen.
Tags und Links typescript