this
è l'elemento, $(this)
è l'oggetto jQuery costruito con quell'elemento
$(".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);
});
Uno sguardo più profondo
this
MDN è contenuto in un contesto di esecuzione
L'ambito si riferisce all'attuale contesto di esecuzione ECMA . Per capire this
, è importante capire come funzionano i contesti di esecuzione in JavaScript.
i contesti di esecuzione lo legano
Quando il controllo entra in un contesto di esecuzione (il codice viene eseguito in quell'ambito) l'ambiente per le variabili viene impostato (ambienti lessicali e variabili - essenzialmente questo imposta un'area per l'immissione delle variabili che erano già accessibili e un'area per le variabili locali da memorizzato) e si this
verifica l'associazione di .
jQuery lo lega
I contesti di esecuzione formano uno stack logico. Il risultato è che i contesti più profondi nello stack hanno accesso alle variabili precedenti, ma i loro collegamenti potrebbero essere stati modificati. Ogni volta che jQuery chiama una funzione di callback, altera questa associazione usando apply
MDN .
callback.apply( obj[ i ] )//where obj[i] is the current element
Il risultato della chiamata apply
è che all'interno delle funzioni di callback di jQuery, si this
riferisce all'elemento corrente utilizzato dalla funzione di callback.
Ad esempio, in .each
, la funzione di richiamata comunemente usata consente .each(function(index,element){/*scope*/})
. In tale ambito, this == element
è vero.
I callback jQuery utilizzano la funzione apply per associare la funzione chiamata all'elemento corrente. Questo elemento proviene dalla matrice di elementi dell'oggetto jQuery. Ogni oggetto jQuery creato contiene una matrice di elementi che corrispondono all'API jQuery del selettore utilizzata per creare un'istanza dell'oggetto jQuery.
$(selector)
chiama la funzione jQuery (ricorda che $
è un riferimento a jQuery
, code:) window.jQuery = window.$ = jQuery;
. Internamente, la funzione jQuery crea un'istanza di un oggetto funzione. Quindi, anche se potrebbe non essere immediatamente ovvio, l'utilizzo di $()
usi interni new jQuery()
. Parte della costruzione di questo oggetto jQuery è trovare tutte le corrispondenze del selettore. Il costruttore accetterà anche stringhe ed elementi html . Quando si passa this
al costruttore jQuery, si passa l'elemento corrente per un oggetto jQuery con cui costruire . L'oggetto jQuery contiene quindi una struttura a matrice di elementi DOM che corrispondono al selettore (o solo al singolo elemento nel caso di this
).
Una volta creato l'oggetto jQuery, l'API jQuery è ora esposta. Quando viene chiamata una funzione API jQuery, itererà internamente su questa struttura simile ad un array. Per ogni elemento dell'array, chiama la funzione di callback per l'API, associando i callback this
all'elemento corrente. Questa chiamata può essere vista nello snippet di codice sopra dove si obj
trova la struttura simile ad array, ed i
è l'iteratore usato per la posizione nell'array dell'elemento corrente.