2010-06-08 17 views
5

In jQuery, qual è la differenza tra le seguenti due costruzioni di jQuery.each:

// Given 
var arr = [1,2,3,4], 
    results = [], 
    foo = function (index, element) { 
     /* something done to/with each element */ 
     results.push(element * element); // arbitrary thing. 
    } 

// construction #1 
$.each(arr, foo); // results = [1,4,9,16] 

// construction #2 
$(arr).each(foo); // results = [1,4,9,16] 

C'è qualche differenza, o è è puramente sintassi?

risposta

8

Il $().each() è solo un wrapper per $.each(), you can see this in the core code:

each: function(callback, args) { 
    return jQuery.each(this, callback, args); 
} 

Anche se, $(something).each() è destinato per gli elementi, non posso promettere di utilizzarlo con una serie normale non possono rompere in seguito (è improbabile si romperà, dal momento che gli oggetti jQuery sono comunque avvolti in matrici). In questo caso, l'uso previsto chiama direttamente $.each().

1

Non c'è differenza con il modo in cui viene gestito l'array ma puramente la sintassi.

jQuery è una libreria molto allentata e consente di sfruttare in modo diverso ciascuna funzione per adattarsi a voi.

jQuery gestisce il presente in questo modo

function each(first,second) 
{ 
    array = (instanceOf this == Array) ? this : ((first instanceOf Array) ? first : second); 
    callback = (instanceOf second == Function) ? second : first; 
    //As you can see its testing what types are being sent to the fintion 
} 

se l'argomento è una funzione first poi this deve essere la matrice IE $([1,2,3,4]).each(callback) altrimenti la sua prevede che first è la matrice e second è la richiamata IE `$ .each (array, callback);

ma in entrambi i casi il processo è praticamente lo stesso ". Solo il controllo del tipo di argomento aiuta un utente a perdere su come gestire la situazione.

Comunque Anche questo non è il modo in cui ciascuno è in realtà gestita ci sono alcune funzioni che utilizzano questa tecnica per creare la scioltezza

+0

Questi sono 2 funzioni differenti, uno su jQuery per sé, uno un metodo accessibile oggetti jQuery .. Non è come '.fadeIn (callback)' e '.fadeIn ('slow', callback)', questo è un concetto di overload diverso che stai descrivendo, è tutto basato sui parametri opzionali. –

Problemi correlati