2014-07-18 12 views
5

मैं जावास्क्रिप्ट के लिए नया हूं और नामकरण विवादों से बचने के लिए नेमस्पेस का उपयोग करने के तरीके को समझने की कोशिश कर रहा हूं। अब तक, दो सबसे लोकप्रिय तरीकों मैं नामस्थान बनाने के लिए मिल गया है ये हैं:इन नेमस्पेसिंग विधियों के बीच क्या अंतर है?

विधि 1:

var MYAPPLICATION = { 
    calculateVat: function (base) { 
     return base * 1.21; 
    }, 
    product: function (price) { 
     this.price = price; 
     this.getPrice = function(){ 
          return this.price; 
         }; 
    }, 
    doCalculations: function() { 
     var p = new MYAPPLICATION.product(100); 
     alert(this.calculateVat(p.getPrice())); 
    } 
} 

विधि 2:

var DED = (function() { 

    var private_var; 

    function private_method() 
    { 
     // do stuff here 
    } 

    return { 
     method_1 : function() 
      { 
       // do stuff here 
      }, 
     method_2 : function() 
      { 
       // do stuff here 
      } 
    }; 
})(); 

अंतर यह है कि दूसरी विधि आपको निजी विधियों और चरों की अनुमति देती है, क्योंकि वस्तु के अंदर जो कुछ भी है, वह विश्व स्तर पर पहुंच योग्य होगा? इनमें से कौन सी विधियां सर्वोत्तम हैं (या क्या कोई बेहतर तरीका है)?

+1

कॉलर को बेनकाब करने की इच्छा नहीं रखने वाले कार्यों और चरों की क्षमता वास्तव में लाभ है। और आईएमओ, यह एक बड़ा फायदा है। – techfoobar

+1

* क्या यह अंतर है कि दूसरी विधि आपको निजी विधियों और चरों की अनुमति देती है, क्योंकि वस्तु के अंदर जो कुछ भी है, वह विश्व स्तर पर पहुंच योग्य होगा? *: हां। इस वजह से, मैं इसे "सर्वश्रेष्ठ" कहूंगा। – Matt

+1

फर्स्टऑफ़ इसका नाम नहीं है जिसे आप पूछ रहे हैं, इसके बारे में स्कॉइंग/कोड संरचना के बारे में। दूसरा कोई अच्छा नहीं है :) मैं प्रत्येक समाधान के फायदे को समझने के लिए अबाउट [जावास्क्रिप्ट पैटर्न के बारे में] (http://addyosmani.com/resources/essentialjsdesignpatterns/book/) पढ़ने की सिफारिश करता हूं। – Ota

उत्तर

1

दूसरी विधि को 'मॉड्यूल' पैटर्न कहा जाता है। डेवलपर्स के लिए आपके कोड का उपयोग करने के लिए यह आरामदायक बनाता है। स्व-चालान समारोह गुंजाइश बनाता है, इसलिए आप उन तरीकों का पर्दाफाश करते हैं जिन्हें आप ऑब्जेक्ट लौटकर सार्वजनिक करना चाहते हैं जिसमें उन तरीकों (सार्वजनिक एपीआई) के संदर्भ शामिल हैं। उन तरीकों में बहुत से निजी सहायक कार्य और चर हो सकते हैं जिन्हें आप अपने स्वयं के उपयोग के लिए निजी रखते हैं। अधिकांश पुस्तकालय इस तरह से लिखे गए हैं। आमतौर पर आपकी लाइब्रेरी को इस तरह की संरचना करना अच्छा होता है। यहां वेबसाइट का एक लिंक है जो इसे अच्छी तरह से समझाता है: http://www.adequatelygood.com/JavaScript-Module-Pattern-In-Depth.html

पहला तरीका सभी संबंधित कार्यों को एक साथ रखने का तरीका है। आप उन्हें अपने मॉड्यूल में व्यक्तिगत उपयोग के लिए बना सकते हैं। उदाहरण: Calc.add (5,5), Calc.subtract (3,2), Calc.multiply (3,3); समान नामस्थान साझा करें, घटाएं, गुणा करें क्योंकि वे संबंधित हैं।

2

यदि आप अन्य लोगों के लिए एपीआई लिखते हैं, तो मुझे लगता है कि विधि दो बेहतर है। उदाहरण: jQuery।

एक वेब पेज में, मैं विधि एक पसंद करता हूं। उदाहरण: स्टैक ओवरफ्लो

विधि दो में, आप निजी और कार्यशील चर और पाठ नहीं पढ़ सकते हैं, इसलिए अगर कोई बग है, तो आप डीबग के लिए डेवलपर-टूल्स द्वारा कुछ नहीं पढ़ सकते हैं।

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