2012-02-22 4 views
9

मैं यह समझने के लिए jQuery की (1.7.1) ऑब्जेक्ट संरचना को पुन: उत्पन्न करने का प्रयास कर रहा हूं, यह समझने के लिए कि यह कैसे काम करता है।jQuery कैसे एक सरणी वापस कर सकता है और अभी भी यह एक jQuery वस्तु हो सकता है?

(function (window, undefined) { 

    var document = window.document, 
     navigator = window.navigator, 
     location = window.location; 

    window.myclass = (function() { 
     var __con = function() { 
      return new __con.fn.init(); 
     } 

     __con.fn = __con.prototype = { 
      'init' : function() { 
       return this; 
      }, 
      'test' : function() { 
       console.log('test1'); 
       return this; 
      } 
     } 

     __con.fn.init.prototype = __con.fn; 

     __con.test = function() { 
      console.log('test2'); 
      return this; 
     } 

     return __con; 
    })(); 

})(window); 

मेरे कंसोल इस तरह दिखता है:

> myclass().test(); 
    test1 
< __con.fn.__con.init 
> myclass.test(); 
    test2 
< function() { 

      return new __con.fn.init(); 

     } 

मेरे भ्रम कैसे jQuery एक सरणी लौट सकते हैं और अभी भी यह एक jQuery वस्तु होने के लिए सक्षम है मैं निम्नलिखित कोड है? jQuery कंसोल से क्रियान्वित किया जा रहा तरह कुछ दिख सकता है:

> $(document.body) 
    [<body>​…​</body>​] 
> $(document.body).css('width'); 
    "1263px" 

वास्तव में, एक बात यह है कि मैं निश्चित रूप से देखा वापसी वस्तु के लिए < की कमी है। तो यहाँ क्या चल रहा है? मैंने Google पर यह जानने के लिए खोज की है कि jQuery कैसे काम करता है, इसका कोई फायदा नहीं हुआ। हो सकता है कि मैं सिर्फ शब्दावली गलत कर रहा हूं, मुझे यकीन नहीं है। ऐसा लगता है कि मुझे यह समझाते हुए कोई विस्तृत स्रोत नहीं मिल रहा है।

शायद मेरी कोड सिर्फ अधूरा है, लेकिन बुनियादी संरचना मैं अब तक है कि क्या मैं अब तक निकालने में सक्षम किया गया है है। कृपया सही करें अगर यह गलत अपूर्ण है, या अक्षम है क्या मैं अब तक है, और हर तरह से कृपया के बारे में अच्छा पढ़ने प्रदान करने के लिए स्वतंत्र महसूस:

  • जावास्क्रिप्ट सर्वोत्तम प्रथाओं
  • jQuery कैसे काम करता है
  • कुशल जावास्क्रिप्ट कक्षाओं के बारे में सब जावास्क्रिप्ट वस्तु संरचनाओं
  • हालात
    • Singletons
    • प्रोटोटाइप
    • कुछ भी और जो कुछ भी संरचना के इस प्रकार कहा जाता है से संबंधित
+1

मुझे यकीन है कि मैं आपके सवाल का पूरी तरह से समझ में नहीं हूँ, लेकिन इस सवाल का जवाब मैं एक समय पहले पोस्ट पर एक नजर है और देखो अगर यह मदद करता है: http: // stackoverflow।कॉम/प्रश्न/7651404/कैसे-करता-jquery-create-array-items/7651455 # 7651455 – davin

+1

मुझे ये वार्ता अविश्वसनीय रूप से सहायक साबित हुई है: http://yuiblog.com/crockford/ – romario333

+0

बिल्कुल सुनिश्चित नहीं है कि समुदाय विकी काम। मैं समझता हूं कि अब मैं इससे प्रतिष्ठा प्राप्त नहीं कर पाऊंगा, और जो कुछ मैं आपको बता सकता हूं उससे आपको प्रश्न को बंद करना है। यदि यह सही है, तो कृपया इसे बंद करने के लिए वोट दें। Google का उपयोग करके अपने स्वयं के प्रश्न का सफलतापूर्वक जवाब देने में असमर्थता के माध्यम से, मैं यह 'jquery-internals' के बारे में सब कुछ सीखने के लिए जगह बनना चाहता हूं। एक समुदाय विकी बनाने के लिए हाँ या नहीं? – Shea

उत्तर

9

jQuery वस्तुओं सरणी की तरह हैं, तो देखने के लिए और सरणियों की तरह एक बहुत से व्यवहार करते हैं, लेकिन सिर्फ कस्टम वस्तुओं मोटे तौर पर एक के लिए समानता के लिए किए गए वास्तव में कर रहे हैं डीओएम नोड्स का संग्रह (अतिरिक्त कार्यक्षमता को छोड़कर)। सभी सरणी जैसी कार्यक्षमता - लंबाई, टुकड़ा() आदि .. - वास्तव में jQuery प्रोटोटाइप में मैन्युअल रूप से जोड़ा गया है (जिसके लिए jQuery.fn एक उपनाम है), कभी-कभी jQuery ऑब्जेक्ट के साथ एक सरणी फ़ंक्शन को संदर्भ

slice = Array.prototype.slice, 
    ... 
    slice: function() { 
    return this.pushStack(slice.apply(this, arguments), 
     "slice", slice.call(arguments).join(",")); 
    }, 

और कभी-कभी इसे स्क्रैच से लिखकर। annotated code को देखो (शायद आप के लिए एक बहुत उपयोगी संसाधन - यह v1.6.2 को शामिल किया गया है, लेकिन मुझे नहीं लगता कि कुछ भी बहुत कठोर, तब से बदल गया है हो सकता है $ .callbacks के अलावा छोड़कर) को देखने के लिए कि this.length मैन्युअल उदा सेट किया गया है

if (selector === "body" && !context && document.body) { 
    this.context = document; 
    this[0] = document.body; 
    this.selector = selector; 
    this.length = 1; 
    return this; 
} 

jQuery.buildFragment() विधि भी कैसे डोम नोड्स के बड़े संग्रह शामिल करने jQuery वस्तुओं निर्माण कर रहे हैं करने के लिए मौलिक है।

तो योग करने के लिए, jQuery सरणियों का उपयोग नहीं करता है, क्योंकि ज्यादा देशी सरणी कार्यक्षमता jQuery प्रोटोटाइप के गुणों के रूप में दोहराया गया है की तरह यह है कि यह सिर्फ लग रहा है।

+0

क्या यह वास्तव में मैन्युअल रूप से जोड़ा गया है? मैंने देखा है कि अन्य ढांचे (एंडर) बस एक सरणी बनाते हैं और इसमें गुण जोड़ते हैं। – tjameson

+0

+1 सिर्फ मुझे "jQuery एनोटेटेड स्रोत" के लिए अग्रणी है! – hippietrail