最近、構造化されていない JS の書き方をやめたいと思っています。少なくとも私にはかなり便利に思えますが、いくつかの質問に対する答えがまだ見つかりません。では、JS にいくつかの異なるモジュールがあるとしましょう。この場合は "site" と "nav" です。「nav」モジュールにはいくつかのプライベート関数があり、おそらくいくつかのパブリック関数も後で含まれます。これらのモジュールで init 関数を呼び出す最良の方法は何ですか? それらのパブリック関数を作成し、MODULE.init()
; で呼び出すことを考えました。しかし、私にはこれは悪い習慣のように思えます。これまでどこにも見たことがありません。
$(function () {
var site = (function () {
var
module = {},
privateVar = 3; // private variable
function privateFunction() { // private function
// some code here
}
module.init = function () {
// global init function
};
return module;
}());
var nav = (function () {
var
module = {},
navOpen = false; // private variable
function open() { // private function
// some code here
}
function close() { // private function
// some code here
}
module.init = function () {
// event handlers for open and close functions etc.
};
return module;
}());
nav.init();
site.init();
});
私が赤くしたどの記事でも見つけられなかったもう 1 つの質問は、グローバル変数 (body など) を定義する方法でした。これは、おそらくモジュールのいずれかで必要です (それにいくつかのクラスを追加するか、何か)。したがって、「nav」モジュールと「site」モジュールの両方body
で ( jQuery のように) my にアクセスする必要があるとしましょう。$("body")
そのようにする方が良いですか:
$(function () {
var site = (function () {
var
module = {},
body = $("body"); // creating the "body" variable in every module
// .. module code
return module;
}());
var nav = (function () {
var
module = {},
body = $("body"); // and again in this module
// module code
return module;
}());
});
またはJSファイルの一番上に置く
$(function () {
var
body = $("body");
var site = (function () {
// module code
}());
var nav = (function () {
// module code
}());
または、コード全体を改善するためのより良い方法はありますか? よろしくお願いします。