Wie verwende ich requestAnimationFrame mit einem TypeScript-Objekt?

8

Ich habe ein Objekt, das ich auf einer Leinwand zeichnen möchte. Es verwendet requestAnimationFrame , um eine Spielschleife zu starten:

Contoso.ts

%Vor%

app.ts

%Vor%

Beim ersten Aufruf von Initialize kann requestAnimationFrame korrekt Render aufrufen.

Das zweite Mal requestAnimationFrame ruft Render auf, das this.Render ist undefined und es stürzt ab.

Es ist fast so, als ob das Objekt nach dem ersten Aufruf von Initialize zerstört wurde.

Was ist los?

    
Ian Boyd 21.02.2014, 03:28
quelle

4 Antworten

30

Sie haben this context verloren. Zwei mögliche Korrekturen:

%Vor%

Der alternative Fix ist wahrscheinlich etwas übersichtlicher, hat aber den Nachteil, viel mehr Zuweisungen zu machen (Sie wollen wahrscheinlich nicht 1 Schließung pro Frame zuweisen!)

%Vor%     
Ryan Cavanaugh 21.02.2014, 03:33
quelle
5

Verwenden Sie die Pfeilsyntax (Lambda):

%Vor%

Hier ist ein Blogartikel, der mehr über die Besonderheiten dieses Tricks erklärt:

Ссылка

    
x0n 21.02.2014 03:32
quelle
1

Auf Firefox 49.0.1 Ich habe eine Fehlermeldung mit Ryan Cavanaugh Lösung.

  

SyntaxError: schlechte Methodendefinition

für die Zeile:

  

Rendern = () = & gt; {

Die Arbeit, die ich gefunden habe, sieht so aus:

%Vor%     
Alexandre Labedade 29.09.2016 10:21
quelle
1

Der beste Ansatz, den ich gefunden habe.

%Vor%

.bind(this) erstellt eine neue Funktion, deren Schlüsselwort this auf den angegebenen Wert gesetzt ist.

Bonuslesen

Tyler V 24.08.2017 20:48
quelle