2011-08-20 8 views
7
var myVar = $([]); 

¿Qué hace este jQuery?

¿Inicializa la variable en un conjunto jQuery vacío? He buscado los documentos de jQuery pero no he encontrado una explicación para esta sintaxis.

Extracto de la documentación de jQuery http://api.jquery.com/jQuery/

que regresan un conjunto vacío -

A partir de jQuery 1.4, llamando al método jQuery() sin argumentos devuelve un conjunto de jQuery vacía (con una propiedad de longitud de 0). En versiones anteriores de jQuery, esto devolvería un conjunto que contiene el nodo del documento.

¿Podría ser $([]) ser un método heredado para devolver un conjunto jQuery vacío o hace algo completamente diferente?

+4

legado (de código antiguo o hábitos viejos) y/o explícita (por la opción/preferencia), sí. Hay diferentes maneras de despellejar a un gato. (Crea un nuevo objeto jQuery "vacío") –

+2

Has respondido tu propia pregunta. –

+0

;) Es bueno estar seguro. ¡Gracias por la confirmación! –

Respuesta

1

Si bien hay diferentes formas de interpretar el "legado" (como en el comentario de pst), la expresión está documentada con precisión. Sabemos que la función $ es la misma que jQuery así mirando hacia arriba jQuery vemos que puede aceptar los argumentos de varias formas diferentes:

  • jQuery(selector, [context])
  • jQuery(element)
  • jQuery(elementArray)
  • jQuery(jQueryObject)
  • jQuery()

El uno aceptar un conjunto de elementos está documentado como tan:

  • ElementArray: Una matriz que contiene un conjunto de elementos DOM para envolver en un objeto jQuery.

Responde a su pregunta "Entonces, ¿podría $([]) ser un método heredado para devolver un conjunto jQuery vacío o hace algo completamente diferente?" en el sentido de que no, no hace nada diferente. Obtienes un objeto jQuery con todos los elementos en tu matriz vacía. Todo cero de ellos.

Y como mencionó en su pregunta, a partir de 1.4, simple ol '$() le da el conjunto vacío, por lo que considero que puede ser la forma preferida de hacer las cosas ahora. Dicho esto, $([]) es agradable y explícito, y todavía es compatible.

1

$(obj) le permite crear un objeto jQuery vacío, pero esto es diferente de $()

Por ejemplo: Tengo una solución de espacio de nombres que necesite disponer de eventos personalizados que tomar medidas basadas en un objeto centralizada. Escribí mi propia clase de EventHandler que básicamente se ajusta a un entorno privado $({})

Esto me permite tener un objeto que puede actuar como mi poseedor de eventos y disparador. Expongo bind(), unbind() y trigger() en mi clase EventHandler.

$() Por otro lado, no permite vincular y disparar ya que no hay un objeto base. No estoy del todo seguro de sus ideas con hacer esto, ya que tendría más sentido tener el "defecto" o un objeto jQuery "vacío" para ser $({})

Para resumir: hay cosas que hace que $({})$() no lo hace . Pero $([]) y $() parecen actuar de la misma cantidad de pruebas que he hecho. Quizás $(new Array()) actúa de manera diferente, pero no me interesa investigarlo.

EDITAR con el ejemplo:

var testA = $(); 
testA.bind('customEvent', function() { alert('empty custom'); }); 
testA.trigger('customEvent'); // will not get an alert 

var testB = $({}); 
testB.bind('customEvent', function() { alert('object custom'); }); 
testB.trigger('customEvent'); // will get an alert 


var testC = $([]); 
testC.bind('customEvent', function() { alert('array custom'); }); 
testC.trigger('customEvent'); // acts like testA 
+0

¿Qué enlazarías o activarías en un conjunto vacío de nodos? –

+0

'[]' es un 'Objeto'. Por ejemplo: mi código tiene eventos como 'myDataLoaded' que activa mi módulo de carga de datos JS. Como el módulo no es un objeto DOM, no tiene su propio conjunto de eventos y como no quiero seguir buscando en mis módulos los eventos, solo lo registro en mi objeto de controlador de eventos algo global. De esta forma, cualquier otro módulo puede suscribirse a mi evento personalizado sin necesidad de saber sobre el desencadenante o de dónde proviene el desencadenamiento. –

+0

'[]' es un objeto de matriz, sí. ¿Asi que? '$()' le da un objeto tan bien como '$ ([])'. –

Cuestiones relacionadas