Ich bin nur neugierig zu wissen, wie jQuery in der Lage ist, das "This" -Schlüsselwort in Javascript zu entführen. Aus dem Buch, das ich lese: "Javascript the Definitive Guide" heißt es, dass "this" ein Schlüsselwort ist und Sie es nicht ändern können, wie Sie es mit einer Kennung können.
Nun sagen Sie, Sie sind in Ihrem eigenen Objektkonstruktor und Sie rufen einen jQuery-Code an, wie kann er das von Ihnen entführen?
%Vor%Meine einzige Vermutung wäre, dass Sie jetzt mit einer Closure arbeiten, die die jQuery-Scope-Kette und nicht die Scope-Kette Ihres eigenen Objekts aufweist, da Sie einen Rückruf für die Funktion jQuery each () bereitstellen. Ist das auf dem richtigen Weg?
Danke
Sie können den Kontext einer Funktion (d. h. den Wert this
) ändern, indem Sie sie mit .call()
oder .apply()
aufrufen und den beabsichtigten Kontext als erstes Argument übergeben.
z. B.
%Vor% Hinweis: Übergeben von null
an entweder call
oder apply
macht den Kontext zum Objekt global
oder in den meisten Fällen window
.
Es ist wahrscheinlich die Differenz zwischen .apply()
und .call()
bemerkenswert. Mit der ersten Option können Sie eine Reihe von Argumenten an die Funktion übergeben, auf die sie als Array angewendet wird, während Sie im zweiten Fall die Argumente als reguläre Argumente nach dem Kontextargument hinzufügen können:
Von der jQuery-Quelle :
%Vor% Der function
-Typ in JavaScript hat eine Methode, die apply()
heißt Damit können Sie angeben, an welches Objekt this
gebunden ist. Seine Unterschrift ist:
Einmal aufgerufen, ruft es die Funktion binding this
auf thisObj
auf und übergibt die Argumente arguments
.
Es wird normalerweise als solches verwendet:
%Vor% function.apply () und function.call () können Sie ändern, auf was this
in Javascript verweist. Hier sind ein paar praktische Artikel, die es detaillierter erklären - Scope In Javascript und Bindungsumfang in Javascript
Tags und Links javascript jquery this