2010-06-08 13 views
5

In jQuery, was ist der Unterschied zwischen den beiden folgenden Konstruktionen von 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] 

Gibt es einen Unterschied, oder ist Es ist reine Syntax?

Antwort

8

Die $().each() ist nur ein Wrapper für $.each(), you can see this in the core code:

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

Obwohl $(something).each() für Elemente bestimmt ist, ich Ihnen nicht versprechen, kann es mit einem einfachen Array wird nicht später brechen (es ist unwahrscheinlich es wird brechen, da jQuery-Objekte Arrays umhüllt sind). Die beabsichtigte Verwendung ruft in diesem Fall direkt $.each() auf.

1

Theres keinen Unterschied mit der Art, wie das Array behandelt wird, sondern reine Syntax.

jQuery ist sehr lose Bibliothek und ermöglicht es Ihnen, jede Funktion anders zu nutzen, um Ihnen zu entsprechen.

jQuery behandelt die dies wie so

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 
} 

wenn die first Argument eine Funktion ist dann this das Array $([1,2,3,4]).each(callback) IE sonst seine zu erwarten, dass first das Array und second ist der Rückruf IE `$ .each (Array, Rückruf);

aber so oder so ähnlich ist der Prozess ziemlich gleich`nur die Argument Typ Überprüfung hilft einem Benutzer verlieren, wie man mit der Situation umzugehen.

Auch tho dies ist nicht die Art und Weise jeder dort tatsächlich gehandhabt wird einige Funktionen sind, die diese Technik verwenden, um die Lockerheit

+0

Dies sind zwei unterschiedliche Funktionen zu erstellen, ein auf jQuery selbst, ein Verfahren auf jQuery Objekten .. Es ist nicht wie '.fadeIn (callback)' und '.fadeIn ('slow', callback)', das ist ein anderes Überladungskonzept, das Sie beschreiben, es geht um optionale Parameter. –