オブジェクトが jQuery オブジェクトかネイティブ JavaScript オブジェクトかを素早く確認する方法はありますか?
例:
var o = {};
var e = $('#element');
function doStuff(o) {
if (o.selector) {
console.log('object is jQuery');
}
}
doStuff(o);
doStuff(e);
明らかに、上記のコードは機能しますが、安全ではありません。o
オブジェクトにセレクター キーを追加して、同じ結果を得ることもできます。オブジェクトが実際に jQuery オブジェクトであることを確認するより良い方法はありますか?
それに沿うもの(typeof obj == 'jquery')
ベストアンサー1
あなたはinstanceof
オペレーター:
if (obj instanceof jQuery){
console.log('object is jQuery');
}
説明:jQuery
関数(別名$
)は、コンストラクタ関数コンストラクター関数はプレフィックスを付けて呼び出されますnew
。
を呼び出すと$(foo)
、jQuery は内部的にこれをnew jQuery(foo)
1に変換します。JavaScript は、this
コンストラクター関数内で の新しいインスタンスを指すように初期化を進めjQuery
、そのプロパティをjQuery.prototype
(別名jQuery.fn
) にあるプロパティに設定します。したがって、であるnew
オブジェクトが得られます。instanceof jQuery
true
1実際にはnew jQuery.prototype.init(foo)
、コンストラクター ロジックは と呼ばれる別のコンストラクター関数にオフロードされていますinit
が、概念は同じです。