2013-05-22 8 views
5

これを展開するanswer同じ名前空間(PROJECT)に属する新しいモジュールを作成する方法を知りたいと思います。JavaScript自动匿名モジュール

A.init(); -- will become --> PROJECT.A.init(); 

モジュール

(function(A, $, undefined) { 
    A.init = function() { 
     console.log("A init"); 
    }; 
}(window.A = window.A || {}, jQuery)); 

(function(B, $, undefined) { 
    B.init = function() { 
     console.log("B init"); 
    }; 
}(window.B = window.B || {}, jQuery)); 

A.init(); 
B.init(); 

http://jsfiddle.net/sKBNA/

+0

あなたは何をしようとしたことがありますか? – Bergi

答えて

2

を実証しただけでプロパティチェーンに追加の名前空間を挿入します。

// create top namespace 
window.PROJECT = window.PROJECT || {}; 

// stays the same 
(function(A, $, undefined) { 
    A.init = function() { 
     console.log("A init"); 
    }; 
// except for the last line: 
}(window.PROJECT.A = window.PROJECT.A || {}, jQuery)); 

// same for the B (sub)namespace: 
(function(B, $, undefined) { 
    … 
}(window.PROJECT.B = window.PROJECT.B || {}, jQuery)); 

// and of course add it at the invocations: 
PROJECT.A.init(); 
PROJECT.B.init(); 
+0

素晴らしい!呼び出しを除くと、PROJECT.A.init();とPROJECT.B.init(); – howtodothis

1

ちょうどその名前空間にあなたのオブジェクトリテラルまたは機能を割り当てる、グローバル名前空間にオブジェクトを追加します。

window.PROJECT = {}; 
(function($,window,undefined) { 
    var A = { 
     init : function() { ... } 
    } 
    window.PROJECT.A = A; 
})(jQuery, window); 
PROJECT.A.init(); 

また、モジュールからPROJECTオブジェクトに値を戻すこともできます。

window.PROJECT = {}; 
PROJECT.A = (function($, window, undefined) { 
    var A = { 
     init : function() { ... } 
    } 
    return A; 
})(jQuery,window); 

この場合も、オブジェクトをグローバル変数に戻すことができます。

var PROJECT = (function($, window, undefined) { 
    var A = { 
     init : function() { ... } 
    } 
    var B = { 
     init : function() { ... } 
    } 
    return { A : A, B : B }; 
})(jQuery,window); 

さらに、グローバル名前空間オブジェクトを拡張して、以前のOPの回答に基づいています。これは実際には以前の答えによって既に達成されています。プロジェクトは、さらに先の例のようにしてください拡張すること

var PROJECT = (function(window, undefined) { 
    // Private var 
    var container, 
    // Class constructor 
    Example = function() { 
    } 
    Example.prototype = { 
    }, 
    // Object literal 
    A = { 
     init : function() { 
      container = new Example(); 
     } 
     // Expose or reflect other methods using private instance of Example 
    } 
    return { A : A }; 
})(window); 

(function(window, PROJECT, undefined) { 
    // Private vars 
    ... 
    // Any other non exposed code 
    ... 
    PROJECT.B = { 
     init : function() { ... } 
    } 
    // Make sure PROJECT is attached to window if it is empty object 
    if (typeof window.PROJECT === 'undefined') 
     window.PROJECT = PROJECT; 
})(window, window.PROJECT || {});