Warum ist der „this“-Operator in Javascript inkonsistent?
In JavaScript zeigt der „this“-Operator je nach Aufrufkontext. Dies kann zu Verwirrung und unerwarteten Ergebnissen führen, insbesondere bei der Arbeit mit Rückrufen und Objekten.
Aufrufmuster und „this“-Bindung
Der „this“-Operator ist an gebunden das Objekt oder die Klasse während des Funktionsaufrufs, und diese Bindung wird durch das Aufrufmuster bestimmt:
The Rückruf-Rätsel
Das Problem tritt auf, wenn der Rückruf einer Methode als Funktion aufgerufen wird. Da Rückrufe nicht als Methoden aufgerufen werden, bezieht sich „dies“ auf den globalen Bereich und nicht auf das Objekt, für das es ursprünglich gedacht war.
Best Practices
Eine Strategie, die es zu pflegen gilt Konsistenz bei der „this“-Bindung innerhalb von Rückrufen besteht darin, „var that = this;“ zu verwenden. Muster. Dadurch wird einer neuen Variablen (that) eine Referenz auf „this“ (das Objekt) zugewiesen, die dann im Callback verwendet werden kann.
Ein weiterer empfohlener Ansatz besteht darin, den Aspekt der funktionalen Programmierung von JavaScript zu berücksichtigen und die Abhängigkeit von Klassen zu vermeiden und Vererbungsmuster. Durch die Verwendung reiner Funktionen und Funktionen höherer Ordnung können Sie Logik von Objektzuständen trennen und einen modulareren und vorhersehbareren Code erzielen.
Darüber hinaus sollten Sie die Verwendung eines JavaScript-Frameworks in Betracht ziehen, das Mechanismen zur Handhabung „dieser“ Bindung und Objekt- orientierte Programmierung in einer konsistenten Art und Weise. Denken Sie daran, die Dokumentation und Besonderheiten des Frameworks sorgfältig durchzulesen, um unerwartetes Verhalten zu vermeiden.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3