प्रकटीकरण मॉड्यूल पैटर्न (आरएमपी) उन वस्तुओं को बनाता है जो ओवरराइडिंग के संबंध में अच्छा व्यवहार नहीं करते हैं। नतीजतन, आरएमपी का उपयोग करके बनाई गई वस्तुओं प्रोटोटाइप के रूप में अच्छी तरह से काम नहीं करते हैं। तो यदि आप ऐसी वस्तुओं को बनाने के लिए आरएमपी का उपयोग कर रहे हैं जो विरासत श्रृंखला में उपयोग किए जा रहे हैं, तो बस नहीं। प्रकटीकरण प्रोटोटाइप पैटर्न के उन समर्थकों के विरोध में यह दृष्टिकोण मेरा स्वयं का है।
बुरा विरासत व्यवहार देखने के लिए URL बिल्डर का निम्न उदाहरण लेते हैं,:,
function rmpUrlBuilder(){
var _urlBase = "http://my.default.domain/";
var _build = function(relUrl){
return _urlBase + relUrl;
};
return {
urlBase: _urlBase,
build: _build
}
}
कारण है कि आप कोई निजी घटकों के साथ एक वस्तु के लिए आरएमपी का प्रयोग करेंगे के सवाल अलग स्थापना ध्यान दें कि यदि आप लौटे ऑब्जेक्ट को लें और "http://stackoverflow.com" के साथ urlBase को ओवरराइड करें, आप उम्मीद करेंगे कि बिल्ड() को उचित रूप से बदलने के व्यवहार की अपेक्षा करें। यदि ऐसा नहीं होता है, तो निम्न के रूप में देखा:
var builder = new rmpUrlBuilder();
builder.urlBase = "http://stackoverflow.com";
console.log(builder.build("/questions"); // prints "http://my.default.domain/questions" not "http://stackoverflow.com/questions"
कंट्रास्ट निम्नलिखित URL निर्माता कार्यान्वयन
function urlBuilder = function(){
return {
urlBase: "http://my.default.domain/".
build: function(relUrl){ return this.urlBase + relUrl;}
}
}
var builder = new urlBuilder();
builder.urlBase = "http://stackoverflow.com";
console.log(builder.build()); // prints "http://stackoverflow.com/questions"
जो सही ढंग से कार्य के साथ व्यवहार।
आप में के रूप में इस दायरे का उपयोग करके खुलासा मॉड्यूल पैटर्न के व्यवहार को सही कर सकते निम्नलिखित
function rmpUrlBuilder(){
var _urlBase = "http://my.default.domain/";
var _build = function(relUrl){
return this.urlBase + relUrl;
};
return {
urlBase: _urlBase,
build: _build
}
}
लेकिन वह नहीं बल्कि खुलासा मॉड्यूल पैटर्न के प्रयोजन को हरा दिया। अधिक जानकारी के लिए अपने ब्लॉग खुलासा मॉड्यूल पैटर्न के साथ पोस्ट http://ilinkuo.wordpress.com/2013/12/28/defining-return-object-literals-in-javascript/
स्रोत
2013-12-31 11:33:44
इस आलेख को जांचें: http://addyosmani.com/resources/essentialjsdesignpatterns/book/#revealingmodulepatternjavascript अंत में एक नुकसान अनुभाग है। – nemesv
परिभाषित मॉड्यूल पैटर्न मॉड्यूल पैटर्न और प्रकटन पैटर्न के साथ कुछ नुकसान भी प्राप्त करता है (जैसे रिटर्न स्टेटमेंट के लिए तंग युग्मन, सार्वजनिक और निजी कार्यों को कैसे घोषित किया जाता है, निजी और सार्वजनिक सबराउटिन के लिए गैर-घोषणात्मक नामस्थान, और किसी ऑब्जेक्ट का मिश्रित उपयोग रिटर्न कथन के साथ शाब्दिक): http://github.com/tfmontague/definitive-module-pattern – tfmontague