Bir nesnenin örneğini kontrol etmenin en iyi yolu, instanceof operatörü veya bir nesnenin prototipinin başka bir nesnenin prototip zincirinde olup olmadığını kontrol eden isPrototypeOf () yöntemidir .
obj instanceof jQuery;
jQuery.prototype.isPrototypeOf(obj);
Ancak bazen bir belgedeki birden fazla jQuery örneği durumunda başarısız olabilir. @Georgiy Ivankin'in belirttiği gibi:
Ben varsa $
benim şimdiki ad işaret eden jQuery2
ve dış ad (burada bir nesne var $
ise jQuery1
) o zaman kullanmak yolu yoktur instanceof
bu nesne bir olup olmadığını kontrol için jQuery
nesne
Bu sorunun üstesinden gelmenin bir yolu jQuery nesnesini bir kapatma veya IIFE
//aliases jQuery as $
(function($, undefined) {
/*... your code */
console.log(obj instanceof $);
console.log($.prototype.isPrototypeOf(obj));
/*... your code */
}(jQuery1));
//imports jQuery1
Bu sorunun üstesinden gelmenin diğer bir yolu, jquery
mülkünobj
'jquery' in obj
Ancak, bu denetimi ilkel değerlerle gerçekleştirmeye çalışırsanız, bir hata atar, böylece önceki denetimi değiştirerek obj
birObject
'jquery' in Object(obj)
Önceki yol en güvenli olmasa da ( 'jquery'
özelliği bir nesnede oluşturabilirsiniz), her iki yaklaşımla da çalışarak doğrulamayı geliştirebiliriz:
if (obj instanceof jQuery || 'jquery' in Object(obj)) { }
Buradaki sorun, herhangi bir nesne bir özellik tanımlamak olmasıdır jquery
daha iyi bir yaklaşım prototip sormak olacağını, böylece kendi gibi ve nesne olmadığından emin null
yaundefined
if (obj && (obj instanceof jQuery || obj.constructor.prototype.jquery)) { }
Nedeniyle zorlama , if
deyim değerlendirerek kısa devre yapacak &&
zaman operatörü obj
herhangi biridir falsy değerler ( null
, undefined
, false
, 0
, ""
) ve sonra diğer doğrulamaları gerçekleştirmek için ilerler.
Son olarak bir yardımcı program yazabiliriz:
function isjQuery(obj) {
return (obj && (obj instanceof jQuery || obj.constructor.prototype.jquery));
}
Şuna bir bakalım: Mantıksal Operatörler ve doğruluk / sahtelik
selector
özellik jQuery nesnesi olan bir nesneyi kontrol etmek için kesinlikle doğru bir yol değildir çünkü özellik uzun zaman önce kullanımdan kaldırılmış ve 3.0'da kaldırılmıştır. Önceki sürümlerde bile, bir jQuery nesnesinin boş bir seçici dizesi olabilir, örneğin$(window)
seçici yoktur.instanceof
Bunun yerine kullanın .