オブジェクトのインスタンスをチェックする最良の方法は、instanceof演算子を使用するか、オブジェクトのプロトタイプが別のオブジェクトのプロトタイプチェーンにあるかどうかを検査するisPrototypeOf()メソッドを使用することです。
obj instanceof jQuery;
jQuery.prototype.isPrototypeOf(obj);
ただし、ドキュメントに複数のjQueryインスタンスがある場合、失敗することがあります。@Georgiy Ivankinが述べたように:
私が持っている場合$に私の現在の名前空間ポインティングにjQuery2、私は(ここで、外側の名前空間からオブジェクトを持って$いるjQuery1)、私は使用する方法がありませんinstanceofそのオブジェクトがあるかどうかをチェックするためにjQuery、オブジェクトを
その問題を克服する1つの方法は、クロージャーまたはIIFEでjQueryオブジェクトに別名を付けることです。
//aliases jQuery as $
(function($, undefined) {
/*... your code */
console.log(obj instanceof $);
console.log($.prototype.isPrototypeOf(obj));
/*... your code */
}(jQuery1));
//imports jQuery1
その問題を克服する他の方法は、jqueryプロパティを問い合わせることですobj
'jquery' in obj
ただし、プリミティブ値でそのチェックを実行しようとすると、エラーがスローされます。そのため、前のチェックを変更してobj、Object
'jquery' in Object(obj)
前の方法は最も安全ではありませんが('jquery'オブジェクトにプロパティを作成できます)、両方のアプローチを使用して検証を改善できます。
if (obj instanceof jQuery || 'jquery' in Object(obj)) { }
ここでの問題は、任意のオブジェクトがプロパティjqueryを独自のものとして定義できることです。そのため、プロトタイプで問い合わせて、オブジェクトがそうでないnullかどうかを確認することをお勧めします。undefined
if (obj && (obj instanceof jQuery || obj.constructor.prototype.jquery)) { }
ために強制、ifステートメントは評価して短絡を行います&&時にオペレータをobjのいずれかであるfalsy値(null、undefined、false、0、"")、および、他の検証を実行するように進みます。
最後にユーティリティ関数を書くことができます:
function isjQuery(obj) {
return (obj && (obj instanceof jQuery || obj.constructor.prototype.jquery));
}
見てみましょう:論理演算子と真/偽
selectorプロパティはjQueryオブジェクトであるかどうかを確認するための正しい方法ではありません。プロパティはずっと前に非推奨になり、3.0で削除されたためです。以前のバージョンでも、jQueryオブジェクトは空のセレクター文字列を持つことができます(例えば$(window)、セレクターがない)。instanceof代わりに使用してください。