Wie entführt jQuery "dieses"?

8

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

    
D.C. 05.02.2010, 00:17
quelle

6 Antworten

16

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:

%Vor%

Von der jQuery-Quelle :

%Vor%     
James 05.02.2010, 00:20
quelle
1

Es entführt nichts - es stellt nur sicher, dass "dieses" darauf zeigt, was es will. Suchen Sie nach der Standardfunktion "call", die für ein JavaScript-Funktionsobjekt verfügbar ist.

    
Pointy 05.02.2010 00:19
quelle
1

Siehe die Dokumentation für Function.apply . Der erste Parameter ist der "Kontext". Es kann ein beliebiges Objekt sein. Wenn der Wert null ist, wird der Bereich global festgelegt.

    
Nicole 05.02.2010 00:19
quelle
1

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:

%Vor%

Einmal aufgerufen, ruft es die Funktion binding this auf thisObj auf und übergibt die Argumente arguments .

Es wird normalerweise als solches verwendet:

%Vor%     
Andrew Moore 05.02.2010 00:21
quelle
1

versuche das:

%Vor%     
Andy E 05.02.2010 00:21
quelle
1
Mit

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

    
Dan F 05.02.2010 00:22
quelle

Tags und Links