2015-11-20 25 views
6

मुझे पता है कि इस तरह एक मॉड्यूल:बंद करने और मॉड्यूल के बीच क्या अंतर है?

function User(){ 
    var username, password; 

    function doLogin(user, pw){ 
     username = user; 
     password = pw; 
    }; 
    var publicAPI = { 
     login: doLogin 
    }; 
    return publicAPI; 
} 

जिसके भीतर बंद है: doLogin और वैरिएबल username और password कि User अंदर हैं के मूल्यों को याद किया जाता है, क्या यह एक "बंद" बनाता है । जो मुझे समझ में नहीं आता है वह यह है कि जब भी हम एक बंद करने का उपयोग करते हैं तो हम मॉड्यूल पैटर्न का उपयोग कर रहे हैं? या जैसे ही मैं User के फ़ंक्शन को var User = function(){... जैसे चर में सहेजता हूं, मॉड्यूल नहीं है ... कृपया ध्यान रखें कि मैं जेएस सीख रहा हूं।

+2

से मॉड्यूल पैटर्न बंद करने का उपयोग कर रहा है, दूसरी तरफ नहीं। क्लोजर भाषा का एक अभिन्न हिस्सा हैं, मॉड्यूल केवल एक * पैटर्न * है जो उनसे उभरा है (और कई अन्य चीजें हैं जो आप बंद करने के साथ कर सकते हैं)। – Bergi

उत्तर

4

आपने User एस के लिए फ़ैक्टरी फ़ंक्शन लागू किया है।

आप खुलासा मॉड्यूल पैटर्न का उपयोग कर "लगभग" हैं। ज्यादातर लोग कहेंगे कि खुलासा मॉड्यूल पैटर्न को तुरंत लागू करने की आवश्यकता होगी। मॉड्यूल पैटर्न आमतौर पर कोड संगठन के लिए उपयोग किया जाता है। इसके बजाय आपके पास एक ऑब्जेक्ट फैक्ट्री है।

निजी राज्य के समावेशन को प्राप्त करने के लिए क्लोजर का उपयोग (खुलासा) मॉड्यूल पैटर्न (और अन्य) द्वारा किया जाता है।

जब भी फ़ंक्शन परिभाषित किया जाता है तो एक बंद किया जाता है। कार्यों के साथ काम करने के लिए वे जावास्क्रिप्ट की भाषा सुविधा हैं।

+1

मैं इसे एक कारखाना पैटर्न कहूंगा। "मॉड्यूल" शब्द आमतौर पर केवल स्थिर रूप से बनाए गए ऑब्जेक्ट्स के लिए उपयोग किया जाता है, जहां बंद एक आईईएफई है। – Bergi

0

क्लोजर संलग्न क्षेत्र से जानकारी या राज्य को बंद करने (या कैप्चर) करने का एक तरीका है। असल में यह एक चर के जीवनकाल को विस्तारित करने का माध्यम है।

मॉड्यूल बाहरी दुनिया से कार्यान्वयन और राज्य को छिपाने का एक तरीका है।

तो, doLogin()username और password दोनों पर बंद हो रहा है और इस प्रकार उनका जीवनकाल बढ़ रहा है। और publicAPI द्वारा रेफरिड ऑब्जेक्ट doLogin() उपयोगकर्ता

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