मैं जावास्क्रिप्ट प्रकटीकरण मॉड्यूल पैटर्न का बहुत उपयोग कर रहा हूं और मुझे सार्वजनिक इंटरफ़ेस और आंतरिक के बीच स्पष्ट पृथक्करण पसंद है। हालांकि मैं एक ऐसी स्थिति में चल रहा हूं जो मुझे आश्चर्यचकित करता है कि मेरा समग्र उपयोग पैटर्न सही है, या यदि मुझे पैटर्न के कुछ प्रकार का उपयोग करना चाहिए।जावास्क्रिप्ट मॉड्यूल पैटर्न का खुलासा - फ़ंक्शन के बाद प्रारंभिक चर का खुलासा
समस्या जब कुछ एक मॉड्यूल का init समारोह में पारित कर दिया है और यह भी सार्वजनिक रूप से उजागर करने की आवश्यकता है आंतरिक उपयोग के लिए निजी तौर पर संग्रहित, या तो एक नॉकआउट बाध्यकारी अभिव्यक्ति या कुछ अन्य मॉड्यूल में है। मॉड्यूल का रिटर्न स्टेटमेंट तुरंत निष्पादित होता है और कुछ समय बाद इनिट फ़ंक्शन को कॉल किया जाता है, आमतौर पर कुछ गतिशील पैरामीटर जैसे कि अजाक्स यूआरएल या कच्चे JSON को रेजर व्यू में स्क्रिप्ट ब्लॉक में प्रस्तुत किया जाता है। चूंकि मॉड्यूल का रिटर्न स्टेटमेंट केवल संदर्भ के बजाय निजी चर की प्रतिलिपि देता है, मेरी सेटिंग कि init फ़ंक्शन में निजी चर जो पहले से ही वापस कर चुका है उसे बदल नहीं सकता है।
var productsModule = function() {
var urls;
var init = function(ajaxUrls) {
urls = ajaxUrls;
};
return {
init: init,
urls: urls,
getUrls: function() { return urls; }
};
}();
var customersModule = function() {
var doSomethingWithProductsModule = function() {
alert(productsModule.urls); // undefined
alert(productsModule.getUrls()); // object
} ;
return {
doSomethingWithProductsModule: doSomethingWithProductsModule
};
}();
var urls = {
getProduct: '/Product/'
};
productsModule.init(urls);
customersModule.doSomethingWithProductsModule();
मेरे वैकल्पिक हल सिर्फ इस तरह के "यूआरएल" एक समारोह के रूप में वस्तुओं लपेट और फिर productsModule.getUrls द्वारा पहुंचने की है()। हालांकि यह बहुत गन्दा हो जाता है, विशेष रूप से यदि चर एक नॉकआउट अवलोकन योग्य है जो स्वयं ही एक कार्य है, और इसलिए इसका मूल्यांकन करने के लिए मुझे उत्पादों को मॉड्यूल.getMyObservable()() जैसे डबल ब्रैकेट का उपयोग करने की आवश्यकता है।
क्या किसी ऐसे चीज का उपयोग करके अद्यतित आंतरिक मूल्यों को प्राप्त करने का कोई अच्छा तरीका है जो कम से कम प्रकट मॉड्यूल पैटर्न का अनुमान लगाता है?
यदि आप केवल साधारण वस्तुओं में गुजरने जा रहे हैं, तो विलय करने के लिए ओवरहेड न्यूनतम है, लेकिन यह बेहतर प्रतीत होता है। –
मेरे अपने उत्तर को स्वीकार करने के लिए मेरे बारे में गाल, लेकिन मुझे सही दिशा में इंगित करने के लिए धन्यवाद। –
@ टॉमहॉल: अपना जवाब स्वीकार करना ठीक है। एक जवाब में एक प्रश्न लिखना नहीं है। –