これはすでに何度も尋ねられている可能性があり、私は SO を検索しましたが、これまでに読んだすべての回答は、私が探しているものではありません。
私は、中程度のDOM要素の表示/非表示、いくつかのAJAX呼び出し、およびおそらく他の何かを含むWebサイトに取り組んでいます。したがって、2 つのメイン スクリプト ファイル (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 Dev Tools を介して直接テストできるため、これが気に入っています)。ただし、サイトの機能の一部をよりモジュール化されたスタイルに分離するつもりなので、上記のコードの下 (または別のファイル) に次のようなものを配置したいと考えています。
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
ただし、明らかな欠点が 1 つあります。それは、やのようなコードを書かなければならないことです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() 関数で他のすべてのモジュールを初期化する必要があるのではないでしょうか? 次に、他のモジュールからアクセスできるようにする必要がある関数を返すことを覚えておく必要があります。どちらも問題ありませんが、少し面倒ではありますが、全体として、モジュラー パターンを使用するより良いワークフローに取り組んでいますか?