2011-10-21 12 views
8
jQuery(); //[] 
jQuery("#footer"); //[<div id="footer">...</div>] 

मैं जानता हूँ कि आप इस तरह से कुछ कर सकते हैं कि:jQuery कैसे लौटा मूल्य एक सरणी की तरह दिखता है?

function kablam(tag) { 
    var els = document.getElementsByTagName(tag); 
    els.isKablam = true; 
    return els; 
} 
var body = kablam("body"); //[<body class="ask-page">...</body>] 
body.isKablam; //true 

NodeList कि document.getElementsByTagName से लौटे है की एक "विस्तारित" संस्करण वापस जाने के लिए।

हालांकि, jQuery विपरीत है। यह परिणाम स्वयं में विलीन हो जाता है (जैसा कि here और here देखा जा सकता है)। इसके अलावा, उस की व्याख्या नहीं करता है कि यह कैसे एक सरणी की तरह वस्तु है कि-दिखता है की तरह-एक सरणी देता है जब आप इसे करने के लिए कुछ भी नहीं पारित:

jQuery(); //[] 

जब आप कि, jQuery बस में ही रिटर्न है। (source)

या एक ही करने के लिए विस्तार, जब आप बॉडी टैग का चयन करें:

jQuery("body"); //[<body class="ask-page">...</body>] 

(source)

या, यह सोचने के लिए आते हैं, कुछ भी:

var o = {}, body = document.getElementsByTagName("body"); 
jQuery.merge(o, body); //Object, not [...] 

रिटर्निंग सरणी जैसी ऑब्जेक्ट्स बहुत आसान है, क्योंकि संख्यात्मक कुंजी असाइन करना मामूली है और कोई अन्य कुंजी असाइन करने से अलग नहीं है। लेकिन jQuery ने इसे "सरणी" जैसा कैसे बनाया है?

उत्तर

7

आपको .length, .splice और .push को प्रोटोटाइप पर परिभाषित करने की आवश्यकता है, क्योंकि यह एक सरणी की तरह प्रदर्शित होता है।

सरणी विधियों का कुछ अन्य संयोजन भी काम कर सकता है।

Example

+1

मुझे पूरा यकीन है कि '.push' की आवश्यकता नहीं है :) –

+1

इसके अलावा, इसे प्रोटोटाइप पर होने की आवश्यकता नहीं है। इसे कंसोल में आज़माएं: 'a = {length: 0, splice: function() {}}' – Shmiddty

0

आपकी राय में "सरणी की तरह दिखें" क्या है? आप सरणी के लिए कैसे जांच करेंगे? यदि आप सब कुछ मानते हैं जिसमें एक सरणी होने की लंबाई है तो आपको ऑब्जेक्ट की तरह दिखने की ज़रूरत है, लंबाई की परिभाषा को परिभाषित करना है। jQuery ऐसा करते हैं।

+0

इसलिए मैं सरणी की तरह और सारणी-हमशक्ल अलग कर दिया। ऐरे-जैसे को लंबाई और संख्यात्मक इंडेक्स माना जाता है (जिनमें से दोनों करने के लिए तुच्छ हैं)। सरणी-दिखने के लिए सबसे छोटा जवाब यह है कि जब आप इसे लॉग करते हैं, तो आपको लगता है कि आप एक सरणी देख रहे हैं। – Zirak

+0

@bjornd इस मामले में "एक सरणी की तरह दिखता है" का अर्थ है ब्राउज़र में डीबगर/कंसोल/देव-टूल्स इसे एक सरणी – Raynos

+0

@ ज़ीरक, @ रेयनोस के रूप में प्रिंट करते हैं, इसलिए यह पूरी तरह से निर्भर करता है कि कैसे डिबगर/कंसोल/देव-टूल्स हैंडल प्रकार वस्तुओं। उदाहरण के लिए वे 'ऑब्जेक्ट उदाहरण के लिए ऐरे 'की जांच कर सकते हैं या लंबाई या अन्य सरणी-विशिष्ट संपत्ति की जांच कर सकते हैं। – bjornd

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