3

最近、構造化されていない 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
    }());

または、コード全体を改善するためのより良い方法はありますか? よろしくお願いします。

4

1 に答える 1

1

Closure のおかげで body 変数にアクセスできます。例は hereです。

したがって、関数内で body 変数を宣言する必要はありません。

コンストラクターの問題については、既に1つあり、オブジェクトを宣言するために使用する関数です。詳細な例については、この例を参照してください

于 2013-10-07T11:40:17.893 に答える