2009-01-28 10 views

Répondre

20

Cela dépend sur le fonctionnement interne de jQuery, mais je partirais avec

obj instanceof jQuery 

Il est le plus 'mode JavaScript' de le faire. Gardez à l'esprit qu'il échouera lors du passage d'objets entre les limites de fenêtre/cadre!

suggestion de Tomalak

'jquery' in obj 

devrait fonctionner dans ce cas, vous devez donc utiliser si vous attendez d'échange de données multi-fenêtre. Je ne le recommanderais pas comme une solution générale, car la recherche d'une propriété nommée 'jquery' n'est pas très fiable.

L'opérateur in lancera également une erreur si obj est une primitive. Si ce comportement est indésirable, vous pouvez envisager d'utiliser un de ces tests au lieu:

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

je trouve la deuxième plus attrayante, mais le premier sera probablement plus rapide.

Vérification

Object(obj).hasOwnProperty('jquery') 

échouera, comme des objets jQuery héritent que la propriété de leur prototype.

Je voudrais aussi décourager l'utilisation de la propriété constructor pour la vérification de type JavaScript - il peut fonctionner de manière fiable pour jQuery, mais comme constructor est juste une propriété de l'objet pointé par prototype la propriété de la fonction constructeur au moment de l'instanciation, il y a beaucoup de façons de jouer avec de tels tests ...


Comme une note de côté:

jQuery vérifie lui-même pour obj && obj.jquery. Il n'utilise pas instanceof même une fois. Au lieu de cela, il utilise une combinaison de typeof, Duck-Typing et toString.call() pour la vérification de type, qui devrait fonctionner où instanceof échouera.

En outre, hasOwnProperty() n'est jamais utilisé aussi bien. Je ne suis pas sûr de ce que cela dit à propos de la qualité du code de la bibliothèque jQuery;)

+1

Beaucoup plus détaillé que mon message: +1 et je recommande que votre message soit choisi comme réponse – VonC

+0

Vous avez eu mon vote pour mentionner l'échec de instanceof à travers les limites de fenêtre/cadre! –

+0

Alors, lequel est le meilleur? – Kato

6

un des éléments suivants:

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

instanceof is recommended

+0

Qu'en est-il de: "jquery" dans obj? – Tomalak

+0

Je recommande de ne pas utiliser instanceof en lui-même car il y a [fuite de mémoire connue] (http://ajaxian.com/archives/working-aroung-the-instanceof-memory-leak) lors de l'utilisation de instanceof dans IE. – kflorence

0

Utilisez ceci à la place de instanceof pour tester les objets 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

Pourquoi devrait-on utiliser ceci au lieu de instanceof? – Kato

+0

Veuillez lire le lien fourni dans le commentaire. – kflorence

Questions connexes