it-swarm.it

$ questo vs $ (questo) in jQuery

Ho visto alcune discussioni su SO riguardo a $(this) vs $this in jQuery e hanno un senso per me. (Vedi discussione qui per un esempio.)

Ma per quanto riguarda lo snippet di seguito, dal tutorial del plug-in del sito Web jQuery che mostra come funziona la catenabilità?

(function ($) {

    $.fn.lockDimensions = function (type) {

        return this.each(function () {

            var $this = $(this);

            if (!type || type == 'width') {
                $this.width($this.width());
            }

            if (!type || type == 'height') {
                $this.height($this.height());
            }

        });

    };
})(jQuery);

Cosa fa $this rappresentano sopra? Proprio quando penso di averlo capito ...

74
larryq

$this è solo una variabile ordinaria. Il $ carattere è un carattere valido nei nomi delle variabili, quindi $this si comporta come qualsiasi altro nome di variabile non riservato. Funzionalmente è identico a chiamare una variabile JellyBean.

118
Joe

Di solito usi var $this = $(this); per evitare di creare un nuovo oggetto jQuery più spesso del necessario. Nel caso del codice in basso, crei solo un oggetto anziché due/quattro. È completamente estraneo alla catenabilità.

Potresti anche chiamarlo that, $thi$ o qualsiasi altra cosa (non usare quest'ultima però, è brutta: p) come $ è solo un semplice carattere in JavaScript, esattamente come lo sono gli a-z.

65
ThiefMaster

this in javascript (di solito) rappresenta un riferimento all'oggetto che ha invocato la funzione corrente. Questo concetto è un po 'confuso dai tentativi di jQuery di rendere l'uso di this più user-friendly all'interno del loro .each() struttura ad anello.

outside la .each(), this rappresenta l'oggetto jQuery che .lockDimensions È invocato da.

inside.each() rappresenta l'oggetto DOM iterato corrente.

Generalmente lo scopo di memorizzare $(this) in una variabile locale è impedire di chiamare la funzione jQuery $() più volte , la memorizzazione nella cache a jQueryizedthis dovrebbe aiutare l'efficienza se devi utilizzarla più volte.

$ È semplicemente un carattere di nome variabile valido e viene utilizzato come primo carattere di un nome di variabile di solito per mettere in coda il programmatore che è già un oggetto jQuery (e ha il associato metodi/proprietà disponibili).

Questa domanda non è in realtà correlata all'abilità chain, ma per mantenere l'abilità chain dovresti restituire this in modo da poter aggiungere altre chiamate di funzione e mantenere il significato di this anche in quelle chiamate .

34
jondavidjohn

potresti aver trascurato questa linea:

var $this = $(this);

Qui, $this È solo una variabile che contiene il valore di $(this). Puoi usarlo in modo intercambiabile con $(this) con il vantaggio che non stai facendo la stessa ricerca più e più volte.

14
evan

$this È semplicemente una variabile locale, chiamata in questo modo per ricordare $(this). Salva il lavoro di creazione della versione jQuery di this e puoi usarla diverse volte.

12
Ned Batchelder

$this è solo una copia locale di this racchiusa in jQuery.

A lungo termine, mantenere una copia locale anziché racchiudere this ogni volta che è necessario è molto più efficiente.

10
Justin Niessner

$this = $(this) è un modo per memorizzare nella cache l'oggetto jQuery. È costoso eseguire la funzione jQuery ogni volta, quindi la memorizzazione dell'output consente di riutilizzare più volte il selettore senza richiamare nuovamente la funzione jQuery.

10
Billy Moon

Riempie semplicemente la variabile $this Con $(this), quindi non devi cercare l'elemento $(this) ogni chiamata. Ha prestazioni migliori

var $this = $(this);
9
genesis
 $this = $(this)

il che significa che stai assegnando l'oggetto corrente a una variabile chiamata $this. Non è una parola chiave.

È solo un nome variabile.

9
Sudheer Kumar

È abbastanza semplice: $this = $(this). È solo una scorciatoia utilizzata nell'ambito della funzione interna. Il simbolo del dollaro è solo un personaggio in questo caso, non si riferisce affatto a jQuery. Potrebbe anche essere stato chiamato _this O xthis, il $ È solo un promemoria di ciò che contiene la variabile.

Può sembrare inutile, ma elimina tre invocazioni di metodi ridondanti (la funzione $() non è gratuita), quindi molto probabilmente viene utilizzata lì per motivi di prestazioni.

7
Jens Roland

All'interno di $.fn.lockDimensions, this è l'oggetto jQuery su cui era stato chiamato lockDimensions.

All'interno di .each, this ora fa riferimento al DOMElement nell'iterazione corrente del ciclo. $(this) avvolge DOMElement in un oggetto jQuery e var $this = $(this); sta semplicemente salvando $(this) in una variabile chiamata $this, quindi il costruttore jQuery non lo fa ' t deve essere chiamato più volte (se invece dovessi usare $(this)).

7
Rocket Hazmat

Il segno $ Viene solitamente utilizzato prima dei nomi delle variabili in JavaScript per distinguere tra valore generale e oggetto jQuery. Quindi qui $this Ottiene solo il valore di $(this) che restituisce l'oggetto jQuery di this. $ È solo una parte del nome della variabile valido.

7
Muhammad Usman

$this È una variabile denominata $this Contenente un riferimento a $(this). IMO un po 'inutile.

4
spender

Voglio saltare qui, anche se non ho abilità jQuery esperte.

Innumerevoli volte vedo righe di codice o concetti simili a:

var $this = $(this);

Quindi faccio una riscrittura simile a:

var $jims_this = $(this);

E provalo. Faccio anche questo per chiarire ogni confusione che potrei avere.

Ecco un altro esempio di simile codice mal spiegato:

 <style>
    a.a { font-weight: bold; }
 </style>

Quindi, aggiungi la chiamata addClass al tuo script:

  $("a").addClass("a");

Questo funziona ma è confuso. Potrebbe essere stato scritto come:

<style>
a.my_bold_class { font-weight: bold; }
</style>

 $("a").addClass("my_bold_class");

Jim

4
jim dif