यह पहले से ही कई बार पूछे जा सकते हैं, और मैंने एसओ के आसपास खोज की है लेकिन अब तक मेरे द्वारा पढ़े गए सभी उत्तरों ठीक वही नहीं हैं जो मैं ढूंढ रहा हूं।ऑब्जेक्ट लिटलल या मॉड्यूलर जावास्क्रिप्ट डिज़ाइन पैटर्न
मैं एक वेबसाइट पर काम कर रहा हूं जिसमें मध्यम डोम तत्व दिख रहे हैं/छुपा रहे हैं, कुछ AJAX कॉल, और शायद कुछ और। इसलिए मैं दो मुख्य स्क्रिप्ट फ़ाइलें (एचटीएमएल 5 बॉयलरप्लेट मानक)
plugins.js // third party plugins here
site.js // all my site specific code here
पहले मैं वस्तु शाब्दिक डिजाइन पैटर्न का उपयोग कर रहा होने वाले हैं, इसलिए मेरी site.js
कुछ इस तरह है: तो
var site = {
version: '0.1',
init: function() {
site.registerEvents();
},
registerEvents: function() {
$('.back-to-top').on('click', site.scrollToTop);
},
scrollToTop: function() {
$('body').animate({scrollTop: 0}, 400);
}
};
$(function() {
site.init();
});
अब तक अच्छा, यह अच्छी तरह से पठनीय है, सभी विधियां सार्वजनिक हैं (मैं इसे पसंद करता हूं, क्योंकि यदि आवश्यक हो तो मैं क्रोम देव उपकरण के माध्यम से उनका परीक्षण कर सकता हूं)। हालांकि, मैं अधिक मॉड्यूलर शैली में साइट की कार्यक्षमता के कुछ दसगुणा करने का इरादा है, इसलिए मैं इसके बाद के संस्करण (या में अलग फ़ाइलों) कोड के नीचे कुछ इस तरह करना चाहते हैं:
site.auth = {
init: function() {
site.auth.doms.loginButton.on('click', site.auth.events.onLoginButtonClicked);
},
doms: {
loginButton: $('.login'),
registerButton: $('.register')
},
events: {
onLoginButtonClicked: function() {
}
},
fbLogin: function() {
}
};
site.dashboard = {
};
site.quiz = {
};
// more modules
आप देख सकते हैं, यह बहुत है पठनीय। हालांकि एक स्पष्ट नकारात्मक पक्ष है, जिसे मुझे site.auth.doms.loginButton
और site.auth.events.onLoginButtonClicked
जैसे कोड लिखना है। अचानक इसे पढ़ना मुश्किल हो जाता है, और यह केवल कार्यक्षमता प्राप्त होने के लिए अधिक जटिल हो जाएगा। तब मैं मॉड्यूलर पैटर्न की कोशिश की:
var site = (function() {
function init() {
$('.back-to-top').on('click', scrollToTop);
site.auth.init();
}
function scrollToTop() {
$('body').animate({scrollTop: 0}, 400);
}
return {
init: init
}
})();
site.auth = (function() {
var doms = {
loginButton: $('.login'),
registerButton: $('.register')
};
function init() {
doms.loginButton.on('click', onLoginButtonClicked);
}
function onLoginButtonClicked() {
}
return {
init: init
}
})();
// more modules
आप देखते हैं, उन लंबे नामों चले गए हैं कर सकते हैं, लेकिन फिर मैं मैं site.init() फ़ंक्शन में अन्य सभी मॉड्यूल init करने के लिए उन सब को निर्माण करने के लिए है लगता है? तो मुझे उन कार्यों को वापस करना याद रखना होगा जिन्हें अन्य मॉड्यूल द्वारा सुलभ करने की आवश्यकता है। उनमें से दोनों ठीक हैं, मुझे लगता है कि थोड़ा परेशानी है, लेकिन कुल मिलाकर, क्या मैं मॉड्यूलर पैटर्न के साथ काम कर रहे बेहतर वर्कफ़्लो पर हूं?
'this.doms.loginButton.on ('क्लिक करें', this.events.onLoginButtonClicked) के बारे में क्या;'? – Bergi
यह काम कर सकता है, विश्वास नहीं कर सकता मैंने कोशिश नहीं की। लेकिन मॉड्यूलर पैटर्न की तुलना में लिखना अभी भी काफी लंबा है। – Henson