Abhängig von dem Innenleben von jQuery, aber ich würde gehen mit
obj instanceof jQuery
Es ist das 'JavaScript Weg' es zu tun. Beachten Sie, dass es beim Übergeben von Objekten zwischen Fenster-/Rahmengrenzen fehlschlägt!
Tomalak Vorschlag
'jquery' in obj
sollte in diesem Fall noch arbeiten, so dass Sie es verwenden sollten, wenn Sie Multi-Fenster-Datenaustausch zu tun erwarten. Ich würde es nicht als allgemeine Lösung empfehlen, da die Suche nach einer Eigenschaft namens 'jquery'
nicht sehr zuverlässig ist.
Der Operator in
wird ebenfalls einen Fehler ausgeben, wenn obj
ein Primitiv ist. Ist dieses Verhalten unerwünscht ist, können Sie stattdessen mit einer dieser Tests prüfen:
obj && obj.jquery
'jquery' in Object(obj)
ich die zweite attraktiver finden, aber der erste wird wahrscheinlich schneller sein.
prüfen
Object(obj).hasOwnProperty('jquery')
wird fehlschlagen, wie jQuery-Objekte nur die Eigenschaft von ihrem Prototyp erben.
ich auch in JavaScript für die Typprüfung mit der constructor
Eigenschaft entmutigen würde - es könnte zuverlässig für jQuery arbeiten, aber als constructor
ist nur eine Eigenschaft des Objekts zu prototype
Eigenschaft zum Zeitpunkt der Instanzierung des durch die Konstruktorfunktion zeigte, gibt es viele Möglichkeiten zu Chaos mit solchen Tests ...
Als Randbemerkung:
jQuery selbst prüft, ob obj && obj.jquery
. Es verwendet instanceof
nicht einmal. Stattdessen wird eine Kombination aus typeof
, Duck-Typisierung und toString.call()
für die Typprüfung verwendet, die funktionieren sollte, wenn instanceof
fehlschlägt.
Auch hasOwnProperty()
wird nie auch verwendet. Ich bin mir nicht sicher, was das über die Codequalität der jQuery-Bibliothek sagt;)
Viel detaillierter als meine Post: +1 und ich empfehle Ihren Beitrag als Antwort gewählt werden – VonC
Sie haben meine Stimme für die Erwähnung des Scheiterns von instanceof über Fenster/Frame Grenzen! –
Also welches ist das Beste? – Kato