this
ist das Element, $(this)
ist das mit diesem Element erstellte jQuery-Objekt
$(".class").each(function(){
//the iterations current html element
//the classic JavaScript API is exposed here (such as .innerHTML and .appendChild)
var HTMLElement = this;
//the current HTML element is passed to the jQuery constructor
//the jQuery API is exposed here (such as .html() and .append())
var jQueryObject = $(this);
});
Ein tieferer Blick
this
MDN ist in einem Ausführungskontext enthalten
Der Geltungsbereich bezieht sich auf den aktuellen Ausführungskontext ECMA . Um dies zu verstehen this
, ist es wichtig zu verstehen, wie Ausführungskontexte in JavaScript funktionieren.
Ausführungskontexte binden dies
Wenn die Steuerung in einen Ausführungskontext eintritt (Code wird in diesem Bereich ausgeführt), wird die Umgebung für Variablen eingerichtet (Lexikalische und Variablenumgebungen - im Wesentlichen wird ein Bereich für die Eingabe von Variablen eingerichtet, auf die bereits zugegriffen werden konnte, und ein Bereich für lokale Variablen gespeichert), und die Bindung von this
erfolgt.
jQuery bindet dies
Ausführungskontexte bilden einen logischen Stapel. Das Ergebnis ist, dass Kontexte, die sich tiefer im Stapel befinden, Zugriff auf vorherige Variablen haben, ihre Bindungen jedoch möglicherweise geändert wurden. Jedes Mal, wenn jQuery eine Rückruffunktion aufruft, ändert es diese Bindung mithilfe von apply
MDN .
callback.apply( obj[ i ] )//where obj[i] is the current element
Das Ergebnis des Aufrufs apply
ist, dass sich innerhalb der jQuery-Rückruffunktionen this
auf das aktuelle Element bezieht, das von der Rückruffunktion verwendet wird.
Beispielsweise ermöglicht in .each
die häufig verwendete Rückruffunktion .each(function(index,element){/*scope*/})
. In diesem Bereich this == element
ist wahr.
jQuery-Rückrufe verwenden die Apply-Funktion, um die aufgerufene Funktion an das aktuelle Element zu binden. Dieses Element stammt aus dem Elementarray des jQuery-Objekts. Jedes erstellte jQuery-Objekt enthält ein Array von Elementen, die mit der Selektor- jQuery-API übereinstimmen, mit der das jQuery-Objekt instanziiert wurde.
$(selector)
Ruft die jQuery-Funktion auf (denken Sie daran, dass dies $
ein Verweis auf jQuery
Code ist :) window.jQuery = window.$ = jQuery;
. Intern instanziiert die jQuery-Funktion ein Funktionsobjekt. Während es möglicherweise nicht sofort offensichtlich ist, verwendet es $()
intern new jQuery()
. Ein Teil der Konstruktion dieses jQuery-Objekts besteht darin, alle Übereinstimmungen des Selektors zu finden. Der Konstruktor akzeptiert auch HTML-Zeichenfolgen und -Elemente . Wenn Sie this
an den jQuery-Konstruktor übergeben, übergeben Sie das aktuelle Element für ein jQuery-Objekt, mit dem erstellt werden soll . Das jQuery-Objekt enthält dann eine Array-ähnliche Struktur der DOM-Elemente, die dem Selektor entsprechen (oder im Fall von nur dem einzelnen Element this
).
Sobald das jQuery-Objekt erstellt wurde, wird die jQuery-API jetzt verfügbar gemacht. Wenn eine jQuery-API-Funktion aufgerufen wird, wird diese Array-ähnliche Struktur intern durchlaufen. Für jedes Element im Array wird die Rückruffunktion für die API aufgerufen, wobei die Rückruffunktionen this
an das aktuelle Element gebunden werden . Dieser Aufruf ist im obigen Codeausschnitt zu sehen, in dem obj
sich die Array-ähnliche Struktur befindet und i
der Iterator ist, der für die Position im Array des aktuellen Elements verwendet wird.