3

公開モジュール パターンを使用してコードをセットアップしたいと考えています。メインモジュールのプライベート関数にアクセスできるようにサブモジュールをセットアップしたいのですが、これを行う方法に固執しています。

これは、遊んでいるサンプルコードの一部です。

var Module = (function() {

    function B(){
        console.log("B");

    };

    return {
        //B: B
    };

})();

var Module = Module || {};

Module.Utils = (function() {

    function C() {

        B();
    };

    return {
        C: C
    }

}).apply(Module);

Module.Utils.C();

Utils モジュールからプライベート関数を呼び出せるようにするにはどうすればよいですか?

編集:

Jsutを明確にするために、メインモジュールに追加されるサブモジュールを作成できるようにしたいので、それが役立つ場合はサブモジュールもモジュールにすることができます。私はこれを読んでいました: http://www.sitepoint.com/modular-design-patterns-in-javascript/これは apply() を使用して2番目のモジュールを追加しますが、拡張およびプライベート化機能を使用してモジュールをに追加する必要がありますメインのもの。できれば避けたいですよね?

別の編集 要するに、1 つのメイン モジュールと 2 番目のモジュールを、1 つのセクションでのみ使用される新しいファイルに入れたいと考えています。メインモジュールのプライベート関数を引き続き参照できるようにするには、2番目のモジュールが必要です。これは可能ですか?

これが私が言及するコードです:

//protected utility functions
    utils =
    {
        //add properties to an object
        extend : function(root, props)
        {
            for(var key in props)
            {
                if(props.hasOwnProperty(key))
                {
                    root[key] = props[key];
                }
            }
            return root;
        },

        //copy an object property then delete the original 
        privatise : function(root, prop)
        {
            var data = root[prop];
            try         { delete root[prop]; } 
            catch(ex)   { root[prop] = null; }
            return data;
        }
    };
4

1 に答える 1

4

親モジュールと同じ字句スコープでサブモジュールを定義し、「親」のプライベート関数に対してある種のクロージャを実行しない限り、それはできません。関数を非公開にしたので、それらを呼び出して見ることができる必要があります。また、親モジュールとは別の場所でサブモジュールを定義すると、それらを見ることができません。目的の構造を取得する唯一の方法は次のとおりです。

var Module = (function () {
    function B() {
        console.log("B");
    };

    var Utils = (function () {
        function C() {
            B();
        };

        return {
            C: C
        }
    })()

    return {
        Utils: Utils
    };
})();
于 2013-07-03T13:48:07.137 に答える