這可能已經被問過很多次了,我已經搜索過,但到目前爲止,我讀到的所有答案都不是我正在尋找的。對象文字或模塊化Javascript設計模式
我正在使用中等DOM元素顯示/隱藏,一些AJAX調用和其他可能的網站。所以,我將有兩個主要的腳本文件(HTML5樣板標準)
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();
});
到目前爲止好,可讀性好,所有方法都是公開的(我有點像這樣,因爲如果需要,我可以通過Chrome開發工具直接測試它們)。不過,我打算去耦一些網站的功能將更加模塊化的風格,所以我想有這樣的事情下面的代碼以上(或在單獨的文件):
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()函數來構建它們呢?然後我必須記得返回需要被其他模塊訪問的函數。他們兩個都沒問題我想雖然有點麻煩,但總體而言,我是否採用了模塊化模式更好的工作流程?
'this.doms.loginButton.on('click',this.events.onLoginButtonClicked);'? – Bergi
這可能會奏效,不敢相信我沒有嘗試過。但與模塊化模式相比,寫入仍然很長。 – Henson