एक वस्तु का उदाहरण जाँच करने के लिए सबसे अच्छा तरीका है के माध्यम से है instanceof ऑपरेटर या विधि के साथ isPrototypeOf () जो निरीक्षण करता है, तो एक वस्तु के प्रोटोटाइप किसी अन्य वस्तु के प्रोटोटाइप श्रृंखला में है।
obj instanceof jQuery;
jQuery.prototype.isPrototypeOf(obj);
लेकिन कभी-कभी यह एक दस्तावेज़ पर कई jQuery उदाहरणों के मामले में विफल हो सकता है। जैसा @Georgiy Ivankin ने उल्लेख किया है:
यदि मेरे पास $मेरे वर्तमान नाम स्थान की ओर इशारा करते हैं jQuery2और मेरे पास बाहरी नाम स्थान (जहां $है jQuery1) से एक वस्तु है, तो मेरे पास instanceofजांच के लिए उपयोग करने का कोई तरीका नहीं है यदि वह वस्तु एक jQueryवस्तु है
उस समस्या को दूर करने का एक तरीका एक बंद या 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संपत्ति को बहुत पहले ही हटा दिया गया था और 3.0 में हटा दिया गया था। पहले के संस्करणों में भी, एक jQuery ऑब्जेक्ट में एक खाली चयनकर्ता स्ट्रिंग हो सकती है, उदाहरण के लिए$(window)कोई चयनकर्ता नहीं है।instanceofइसके बजाय उपयोग करें ।