2010-06-08 28 views
5

En jQuery, ¿cuál es la diferencia entre los siguientes dos construcciones de 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] 

¿Hay alguna diferencia, o es es puramente sintaxis?

Respuesta

8

El $().each() es sólo un envoltorio para $.each(), you can see this in the core code:

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

Aunque, $(something).each() está destinado a los elementos, no puedo prometer usarla con un array plano no se rompa más adelante (que es poco probable se romperá, ya que los objetos jQuery son matrices envueltas). El uso previsto es llamar directamente al $.each() en este caso.

1

No hay diferencia con la forma en que se maneja la matriz, sino puramente sintaxis.

jQuery es una biblioteca muy flexible y le permite aprovechar cada función de forma diferente para adaptarse a usted.

jQuery maneja la presente como tal

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 
} 

si el argumento es una función first continuación this debe ser la matriz IE $([1,2,3,4]).each(callback) por lo demás es de esperar que first es la matriz y second es la devolución de llamada IE `$ .Cada (matriz, devolución de llamada);

pero de cualquier manera el proceso es prácticamente el mismo 'solo la comprobación de tipo de argumento ayuda a un usuario a perder la forma de manejar la situación.

Incluso aunque esto no es la forma en que cada uno está realmente manejan hay algunas funciones que utilizan esta técnica para crear la soltura

+0

Estos son 2 funciones diferentes, uno sobre sí mismo jQuery, uno un método disponible en los objetos jQuery .. . No es como '.fadeIn (callback)' y '.fadeIn ('slow', callback)', ese es un concepto de sobrecarga diferente que está describiendo, todo se trata de parámetros opcionales. –

Cuestiones relacionadas