2011-08-29 18 views
15

io non sono il migliore in jQuery e mi sono imbattuto in una di inizializzazione var che non so il motivo per cui la persona che ha scritto il codice ha fatto in questo modo.

Nel init per un plugin, abbiamo

this.init = function(settings) { 
    var $this = this; 
    this.s = { 
     initialSlide: 0, 
     firstSlide: true, 
    }; 
    ... more code, some uses $this, some uses "this" 
} 

Allora, qual è la differenza qui tra "$ questo" e "questo" e perché non utilizzare uno o l'altro per tutto il tempo?

+0

sì, è un idioma jquery –

+0

@Matt: non c'è jQuery nel codice. Assegnare 'this' a un'altra variabile è anche molto comune in" plain JavaScript ". –

+0

@Felix: è un plugin, il che significa che si riferisce a un oggetto jQuery. C'è (o era) un idioma jquery per prefissare oggetti jquery con $. quindi, è una domanda jquery. Se non fosse jQuery, invece di $ questo probabilmente vedresti, quello, se stessi, o qualcosa di più descrittivo su ciò che in realtà significa –

risposta

31

Generalmente, questo significa una copia di this. La cosa su this è che cambia all'interno di ogni funzione. Memorizzandolo in questo modo, tuttavia, non cambia $this mentre this cambia.

jQuery utilizza pesantemente il valore magico this.

Considerate questo codice, in cui potrebbe essere necessario qualcosa come state vedendo:

$.fn.doSomethingWithElements = function() { 
    var $this = this; 

    this.each(function() { 
     // `this` refers to each element and differs each time this function 
     // is called 
     // 
     // `$this` refers to old `this`, i.e. the set of elements, and will be 
     // the same each time this function is called 
    }); 
}; 
+0

per la versione precedente di jQuery come si scrive $ this? jQuerythis ?? – Hitesh

+1

var $ questo è proprio come qualsiasi altro nome di variabile, il $ e questo è solo un modo per mantenere un'altra persona che legge il codice per sapere cosa fa la variabile più in basso nella pagina. In breve, sì, si potrebbe scrivere 'var jQuerythis', ma questo non fa alcuna differenza. Puoi usare $ in jQuery più vecchi, come detto sopra $ this isnt jQuery dependent, è solo un modo per creare una copia di 'this'. –

5

In questo caso, niente. $this è solo un'altra dichiarazione variabile a cui è assegnato this.

In genere, ho visto questa scorciatoia utilizzata da persone che utilizzano librerie JavaScript quando la confezione this. Ad esempio, l'utilizzo tipico in jQuery sarebbe:

// rather than writing $(this) everywhere 
var $this = $(this); 

$this.each(function(){ 
    // Do Something 
}); 
0

Vuol dire nulla in questo caso (no pun intended). Sarebbe più logico se l'affermazione fosse var $this = $(this) poiché ciò consentirebbe di utilizzare tutta la bella funzionalità di jQuery.

+0

Non corretto, la riassegnazione a una variabile diversa consente alle chiusure interne di fare riferimento all'ambito esterno. – Evert

0

ciò che chiunque altro ha detto, c'è anche un linguaggio in codice jQuery prefisso oggetti jQuery con $. non so quanto sia popolare, ma è abituato a vederne molte.

0

io $ this = $ (questo), perché sembra che avrebbe salvato il trattamento effettivo di quella chiamata ogni volta che si desidera utilizzarlo.

Inoltre, per la funzione 'magica' questa '' che qualcun altro ha menzionato. È utile conservare la copia originale.

0

In realtà jQuery è un wrapper per il DOM JavaScript, sia migliorando e semplificando esso. molto brevemente JQuery selettori ritornano JQuery Oggetto/s cioè

var jQueryResults = $("article"); //Contains all article elements in the DOM as JQuery objects 

Tuttavia, selezionando gli elementi con JavaScript restituisce elementi HTML DOM vale a dire

var normalResults = document.getElementsByTagName("article");//Contains all article elements in the DOM as HTML objects 

I problemi sorgono in quanto oggetti DOM non forniscono la stessa funzionalità che Forniscono oggetti JQuery.

Ecco un esempio evento che illustra la differenza:

$('.changeColorHover').hover(function() { 
    this.attr("style", "color:red"); 
}); //Will not work as we are trying to call a JQuery method on a DOM object 

Con la suddetta in mente il 'questo' parola chiave è un oggetto DOM e quindi si sono tenuti a convertirlo in un oggetto jQuery in ordine utilizzare i metodi jQuery.

$('.changeColorHover').hover(function() { 
     $(this).attr("style", "color:red"); 
}); //Will work since we have first converted the DOM object to a JQuery object 

In sintesi, la parola chiave this, permette di accedere l'oggetto che ha chiamato l'evento come questo darà un riferimento all'oggetto che ha generato l'evento. Ma questo è un oggetto DOM, non un oggetto jQuery. Di conseguenza, nessuno dei metodi jQuery che desideri utilizzare non sono disponibili, a meno che non lo converti in un oggetto jQuery.

Problemi correlati