2009-01-28 11 views
11

मैं एक जावास्क्रिप्ट फ़ंक्शन लिख रहा हूं और "कॉम्पैक्ट" जावास्क्रिप्ट डिज़ाइन फैशन में, तर्कों का प्रकार/लंबाई फ़ंक्शन के व्यवहार को बदलता है। तर्क का एक संभावित प्रकार एक jQuery ऑब्जेक्ट है, जिसके लिए मुझे बहुत विशेष तर्क चाहिए।जावास्क्रिप्ट में ऑब्जेक्ट एक jQuery ऑब्जेक्ट है या नहीं, यह जांचने का सही/उचित तरीका क्या है?

किसी वस्तु का jQuery का उदाहरण होने का परीक्षण करने का सबसे अच्छा तरीका क्या है?

उत्तर

20

jQuery की अंदरूनी कामकाज पर निर्भर करता है, लेकिन मैं

obj instanceof jQuery 

यह सबसे के साथ जाना चाहते हैं 'जावास्क्रिप्ट रास्ता' ऐसा करने का ध्यान रखें कि खिड़की/फ्रेम सीमाओं के बीच वस्तुओं को पार करते समय यह असफल हो जाएगा!

Tomalak के सुझाव

'jquery' in obj 

अभी भी, इस मामले में काम करना चाहिए ताकि आप इसे का उपयोग करना चाहिए अगर आप बहु खिड़की डेटा विनिमय करने की उम्मीद। मैं इसे सामान्य समाधान के रूप में अनुशंसा नहीं करता, क्योंकि 'jquery' नाम की एक संपत्ति की तलाश करना बहुत विश्वसनीय नहीं है।

in ऑपरेटर obj एक आदिम है तो एक त्रुटि भी फेंक देगा। यदि यह व्यवहार अवांछित है, आप के बजाय इन परीक्षणों में से एक विचार कर सकते हैं:

obj && obj.jquery 
'jquery' in Object(obj) 

मैं दूसरा एक और अधिक आकर्षक लगता है, लेकिन पहले एक संभावना तेजी से हो जाएगा।

Object(obj).hasOwnProperty('jquery') 

जाँच हो रही है, असफल के रूप में jQuery केवल अपने प्रोटोटाइप से संपत्ति का वारिस वस्तुओं होगा।

मैं भी जावास्क्रिप्ट में टाइप जांच के लिए constructor संपत्ति का उपयोग कर दूंगी - यह मज़बूती से jQuery के लिए काम कर सकते हैं, लेकिन constructor के रूप में सिर्फ वस्तु का एक संपत्ति इन्स्टेन्शियशन समय में निर्माता समारोह के prototype संपत्ति के द्वारा की ओर इशारा किया है, देखते हैं इस तरह के परीक्षण के साथ गड़बड़ करने के लिए बहुत से तरीके हैं ...


एक तरफ ध्यान दें के रूप में:

jQuery ही obj && obj.jquery के लिए जाँच करता है। यह एक बार भी instanceof का उपयोग नहीं करता है। इसके बजाय, यह टाइपिंग जांच के लिए typeof, बतख-टाइपिंग और toString.call() के संयोजन का उपयोग करता है, जो काम करना चाहिए जहां instanceof विफल हो जाएगा।

इसके अलावा, hasOwnProperty() का भी कभी भी उपयोग नहीं किया जाता है। मुझे यकीन नहीं है कि यह jQuery लाइब्रेरी की कोड गुणवत्ता के बारे में क्या कहता है;)

+1

मेरी पोस्ट से अधिक विस्तृत: +1 और मैं आपकी पोस्ट को – VonC

+0

के रूप में चुना जाने की अनुशंसा करता हूं आपको खिड़की/फ्रेम सीमाओं के उदाहरण की विफलता का उल्लेख करने के लिए मेरा वोट मिला है! –

+0

तो कौन सा सबसे अच्छा है? – Kato

6

निम्न में से एक:

obj instanceof jQuery 
obj && obj.constructor == jQuery 
obj && obj.jquery 

instanceof is recommended

+0

ओबीजे में "jquery" के बारे में क्या है? – Tomalak

+0

आईई में उदाहरण का उपयोग करते समय मैं [उदाहरण के लिए ज्ञात मेमोरी लीक] (http://ajaxian.com/archives/working-aroung-the-instanceof-memory-leak) उदाहरण के माध्यम से उदाहरण के खिलाफ अनुशंसा करता हूं। – kflorence

0

उदाहरण के बजाय jQuery ऑब्जेक्ट्स के परीक्षण के लिए इसका उपयोग करें।

/** 
* @see http://ajaxian.com/archives/working-aroung-the-instanceof-memory-leak 
* @return Boolean True if object is of type jQuery, false otherwise 
*/ 
function isjQuery(obj) { 
    return obj && obj.hasOwnProperty && obj instanceof jQuery; 
} 
+0

उदाहरण के बजाए इसका उपयोग क्यों करना चाहिए? – Kato

+0

टिप्पणी में दिए गए लिंक को पढ़ें। – kflorence

संबंधित मुद्दे

 संबंधित मुद्दे