2009-01-28 10 views

Respuesta

20

depende del funcionamiento interno de jQuery, pero me gustaría ir con

obj instanceof jQuery 

Es el más es 'JavaScript camino' de hacerlo Tenga en cuenta que fallará al pasar objetos entre los límites de la ventana/cuadro.

sugerencia de Tomalak

'jquery' in obj 

debería funcionar en este caso, por lo que se debe utilizar si va a hacer el intercambio de datos multi-ventana. No lo recomendaría como una solución general, ya que simplemente buscar una propiedad llamada 'jquery' no es muy confiable.

El operador in también arrojará un error si obj es una primitiva. Si este comportamiento no es deseado, es posible considerar el uso de una de estas pruebas en su lugar:

obj && obj.jquery 
'jquery' in Object(obj) 

encuentro el segundo más atractivo, pero el primero probablemente será más rápido.

Comprobación

Object(obj).hasOwnProperty('jquery') 

fallará, como jQuery objetos sólo hereda la propiedad de su prototipo.

me gustaría también desalentar el uso de la propiedad constructor para la comprobación de tipos en JavaScript - Puede que funcione de forma fiable para jQuery, pero como constructor es sólo una propiedad del objeto apuntado por la propiedad de la función constructora prototype en el momento de instancias, hay muchas maneras de meterse con este tipo de pruebas ...


Como nota al margen:

jQuery sí cheques para obj && obj.jquery. No usa instanceof ni una sola vez. En su lugar, utiliza una combinación de typeof, pato-tipado y toString.call() para verificación de tipo, que debería funcionar donde instanceof fallará.

Además, hasOwnProperty() nunca se utiliza también. No estoy seguro de lo que dice esto sobre la calidad del código de la biblioteca jQuery;)

+1

Mucho más detallado que mi publicación: +1 y recomiendo que su publicación sea elegida como la respuesta – VonC

+0

¡Obtuve mi voto por mencionar la falla de instanceof en los límites de ventanas/marcos! –

+0

Entonces, ¿cuál es el mejor? – Kato

6

Uno de los siguientes:

obj instanceof jQuery 
obj && obj.constructor == jQuery 
obj && obj.jquery 

instanceof is recommended

+0

¿qué ocurre con: "jquery" en obj? – Tomalak

+0

No recomendaría usar instanceof solo ya que hay [pérdidas de memoria conocidas] (http://ajaxian.com/archives/working-aroung-the-instanceof-memory-leak) cuando se usa instanceof en IE. – kflorence

0

Utilice esto en lugar de instanceof para probar los objetos jQuery.

/** 
* @see http://ajaxian.com/archives/working-aroung-the-instanceof-memory-leak 
* @return Boolean True if object is of type jQuery, false otherwise 
*/ 
function isjQuery(obj) { 
    return obj && obj.hasOwnProperty && obj instanceof jQuery; 
} 
+0

¿Por qué debería uno usar esto en lugar de instanceof? – Kato

+0

Por favor, lea el enlace proporcionado en el comentario. – kflorence

Cuestiones relacionadas