2012-09-04 12 views
5

मैं हाल ही में जावास्क्रिप्ट के साथ बहुत काम कर रहा हूं और कुछ बड़े फ़ंक्शन संग्रह बनाए हैं। मुझे उप-कार्यक्षमता की आवश्यकता है जो मैं मुख्य पुस्तकालय से अलग करना चाहता हूं फिर भी मुख्य पुस्तकालय में शामिल किया गया है लेकिन अभी तक ऐसा करने के लिए एक शानदार तरीका नहीं मिला है।वर्तमान नामस्थान/कक्षा के अंदर जावास्क्रिप्ट उप नेमस्पेस/कक्षा के लिए वाक्यविन्यास क्या है?

यहाँ है कि मैं इस समय का उपयोग

तो मैं आमतौर पर सेटअप मेरी मुख्य पुस्तकालय इस

// Main library 
var animals = function(settings){ 
    // Main library stuff 
} 

की तरह उप वर्गों/उप कार्यक्षमता कि अलग से, लेकिन अभी भी समझाया है जोड़ने के लिए उदाहरण के एक जोड़े हैं मुख्य पुस्तकालय का हिस्सा ...

ऑब्जेक्ट शाब्दिक नोटेशन

का उपयोग करने वाला यह पहला तरीका है
animals.prototype.dogs = { 
    addDog: function(){ 
     // Can only access the dogs object 
     var test = this; 
    }, 
    removeDog: function(){} 
} 

// Usage of the whole thing 
var animalsInstance = new animals({a: 1, b: 3}); 
animalsInstance.dogs.addDog(); 

जबकि मुझे वास्तव में इसका वाक्यविन्यास पसंद है, मैं वास्तव में इसका उपयोग कभी नहीं कर सकता क्योंकि कुत्ते के ऑब्जेक्ट के अंदर किसी भी कार्य के अंदर जानवरों के उदाहरण का संदर्भ देने का कोई तरीका नहीं है। तो मैं एक स्थानापन्न के रूप इस अंकन के साथ आया था

animals.prototype.dogs = function(){ 
    var parent = this; 
    return { 
     addDog: function(){ 
      // The animals instance 
      var test = parent; 
      // The dogs instance 
      var test2 = this; 
     }, 
     removeDog: function(){} 
    } 
} 

// Usage 
var animalsInstance = new animals({a: 1, b: 3}); 
animalsInstance.dogs().addDog(); 

हालांकि अब मैं कुत्तों कार्यों मैं क्या वास्तव में नहीं थोड़ा hacky तरह से मैं की तरह के सभी उप कार्यक्षमता अंदर से जानवरों उदाहरण के लिए उपयोग कर सकते हैं मैंने इसे किया क्या किसी को भी क्लीनर विधियां मिली हैं?

+6

http://stackoverflow.com/questions/1595611/how-to-properly-create-a-custom-object-in-javascript#1598077 – zerkms

+0

धन्यवाद, मुझे लगता है कि मैंने जो प्रश्न लिखा था वह आपकी याद आ रही थी, आपका लिंक बताता है कि मूल विधियों को प्राप्त करने वाले उप वर्ग को कैसे बनाया जाए। मुझे लगता है कि मैं जो भी कर रहा हूं वह संबंधित विधियों के विभिन्न समूहों को अलग-अलग नामस्थान के तहत अलग करने का एक तरीका है। i.e जानवरों के नीचे सभी कुत्तों से जुड़े कार्यों। डॉग्स। [यहां कोई विधि नाम डालें]। जब आप 40/50 + कार्यों में आते हैं तो यह बोझिल हो जाता है। मेरा असली दुनिया का उदाहरण एक वृक्षग्रिड के लिए था जो मैं विकसित कर रहा था, हर समारोह इसे मुख्य ट्रीग्रिड कक्षा के तहत रखने में प्रासंगिक था, लेकिन मुझे कार्यक्षमता के उपखंडों को अलग करने की आवश्यकता थी। – Ally

+0

यदि आप सभी विधियों को नहीं चाहते हैं - विरासत का उपयोग न करें, प्रतिनिधिमंडल का उपयोग करें। – zerkms

उत्तर

4

शायद आपके कुछ इस तरह की तलाश में ...

यह आपको निम्न सिंटैक्स tinyFramework.Utilities.Storage.setItem() tinyFramework.Elements.Modals.createModal()

है करने की अनुमति देगा
var tinyFramework = { 

    Utilities: { 
     Storage: { 
      setItem: function(){ 
      //do stuff 
      }, 

      getItem: function(){ 
      //do stuff 
      } 
     }, 
     Helpers: { 

     } 
    }, 

    Elements: { 

     Modals: { 

      createModal: function(){ 
      }, 
      closeModal: function(){ 
      } 
     } 
    } 
} 
+0

यह काम करेगा क्योंकि छोटे फ्रेमवर्क का केवल एक उदाहरण है, इसलिए मैं इसे कहीं से और किसी भी छोटे फ्रेमवर्क फ़ंक्शन के अंदर संदर्भित कर सकता हूं। मेरे उदाहरण में मैं जानवरों के उदाहरणों का उपयोग कर रहा था जो कई उदाहरणों को अनुमति देने के लिए एक समारोह है। शायद मुझे अपनी सारी कार्यक्षमता को छोटे फ्रेमवर्क में संदर्भित करना चाहिए और संदर्भ है कि मेरे जानवरों के उदाहरणों में। पुनर्विचार के लिए धन्यवाद मुझे लगता है कि यह कार्यक्षमता की पुस्तकालय बनाने का सबसे अच्छा तरीका है। – Ally

+0

खुशी है कि मैं मदद कर सकता हूं, इस प्रकार की वस्तु बहुत उपयोगी और कार्यान्वित करने में आसान हो सकती है। तुम्हारे लिऐ शुभकामना! – afreeland

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

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