Ich habe eine Member-Funktion render(). Diese Funktion ruft ein anderes Mitglied der Klasse add (any) auf. Dies ist das Snippet.Das Schlüsselwort this in Typoskript. Ist es ein Fehler?
Wenn ich das Schlüsselwort "this" addiere, ist der Typ Fenster. Ich würde erwarten, dass es die Instanz der Mitgliedsklasse ist.
In einem Konstruktor, einer Memberfunktion oder einem Member-Accessor ist dies der Klasseninstanztyp der enthaltenden Klasse.
IMO, es ist ein Fehler, aber in der TypeScript-Sprachdefinition. "This" innerhalb einer Klasse sollte sich auf die Klasseninstanz "period" beziehen. Die Art und Weise, in der JavaScript ändert, worauf "this" verweist, je nachdem, wie die Methode aufgerufen wird, ist einer ihrer schlimmsten Fehler (in einer Sprache, die voll von ihnen ist). Wenn TypeScript eine echte Obermenge von JavaScript sein will, kann es das für normale Methoden nicht ändern, aber es kann und sollte es unbedingt für Klassenmethoden ändern. –
Aber Sie sind innerhalb einer Callback-Schließung (von 'each()', nicht 'render()'). Closure Scoping ist ein grundlegendes Merkmal von JS und daher von TS. Wie auch immer, es könnte ein * Feature * sein, das Sie (und das OP) nicht mögen, aber es ist sicherlich beabsichtigt und entspricht der veröffentlichten Spezifikation, also ist es definitionsgemäß kein * Bug *. Viel zu viele Posts über SO, IMO, Trompete, offensichtliche "Bugs" in ihren Titeln: Es ist ein Begriff, der mit mehr Sorgfalt verwendet werden sollte. – JcFx
Einverstanden, dass es kein Fehler in der Implementierung ist - nur in der Spezifikation :-). Vielleicht wäre ein Workaround (auf der Spezifikationsebene) ein anderes Schlüsselwort - "ich"? - 'das'? - die immer auf die Klasseninstanz, nicht auf das Objekt, dem die Methode zugewiesen wurde, zeigt. –