2014-10-16 6 views
7

मैं कुछ जावास्क्रिप्ट को पुन: स्थापित करने की कोशिश कर रहा हूं और मैं मॉड्यूल पैटर्न के बारे में उलझन में हूं।मॉड्यूल पैटर्न का उपयोग करने और नई वस्तुओं को तत्काल करने के बीच अंतर

एक तरह से मैं अब बस इतना

var Foo = function(){ 
    this.Bar = {}; 
    ... 
} 

की तरह एक घटक के लिए एक वर्ग के सभी कार्यक्षमता युक्त घोषित करने और घटक में उपयोग के लिए एक नया उदाहरण बनाने के लिए है। लेकिन मैंने मॉड्यूल पैटर्न के बारे में भी पढ़ा है और मैं यह नहीं देख सकता कि मेरे पास जो कुछ है, उससे तुलना में लाभ की तुलना की जाएगी, बस एक और जटिल तरीके से। हो सकता है कि मैंने अभी इस मामले का सामना नहीं किया है जो इसे बेहतर विकल्प बनाता है। उदाहरण के लिए, इस तरह एक पैटर्न:

var module = (function() { 
    // private variables and functions 
    var foo = 'bar'; 

    // constructor 
    var module = function() { 
    }; 

    // prototype 
    module.prototype = { 
     constructor: module, 
     something: function() { 
     } 
    }; 

    // return module 
    return module; 
})(); 

var my_module = new module(); 

क्या मैं पहले से ही था से काफी अलग प्रतीत नहीं होता। यह पैटर्न मुझे ऐसा करने देता है कि मैं दूसरी तरफ नहीं कर सकता?

+1

इस प्रश्न में कई अच्छे उत्तर हैं: http://stackoverflow.com/questions/5647258/how-to-use-revealing-module-pattern-in-javascript – Hrishi

उत्तर

3

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

एक निजी चर और समारोह के साथ उदाहरण 1:

var Foo = function(){ 
    var privateVar = "priv"; 

    function privateFunction(){ 
     console.log(privateVar); 
    } 

    this.publicProperty = 1; 

    this.publicFunction = function(){ 
     console.log(privateVar); 
    } 
} 

ऊपर कोई समस्या नहीं है अगर आप प्रोटोटाइप का उपयोग नहीं करना चाहते हैं। हालांकि, यदि आप ऐसा करते हैं तो निजी चर रखने का कोई तरीका नहीं है, बिना किसी नए दायरे के आपके दूसरे उदाहरण से लाभ मिलता है।

जैसा कि आप देख सकते हैं, आपको कन्स्ट्रक्टर के भीतर सबकुछ शामिल करना होगा, जबकि दूसरा उदाहरण आप केवल प्रारंभिक चर के लिए कन्स्ट्रक्टर छोड़ सकते हैं।

इसके विपरीत, दूसरे उदाहरण में प्रोटोटाइप विधियां कन्स्ट्रक्टर के दायरे से बाहर हैं, इसलिए वे कन्स्ट्रक्टर के भीतर कार्यों के किसी भी चर का उपयोग नहीं कर सकते हैं। बाहरी कार्यक्षेत्र में प्रोटोटाइप विधियों की आवश्यकता होने वाले सभी कार्यों और चरों को घोषित किया जाना चाहिए।

+0

डाउनवोट की व्याख्या करने के लिए देखभाल? – MrCode

+0

स्पष्टीकरण के लिए धन्यवाद, पता नहीं क्यों आप डाउनवॉट किया गया है: / – Valyrion

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

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