2011-03-01 79 views
38

比方說,我有一個這樣的命名空間:拆分一個javascript命名空間分割成多個文件

var myNamespace = { 
    foo: function() { 
    }, 
    bar: function() { 
    } 
}; 

什麼是拆分此代碼爲限定了分別foobar文件的最好方法?

我不擔心加載時間 - 我會在部署之前將它連接回一個文件。

+4

投了一個好問題!教我好東西。 – 2013-01-15 07:08:23

+0

也提到在:http://stackoverflow.com/a/4130511/895245 – 2016-10-18 12:37:08

回答

42

在每個文件的開始:

if(myNameSpace === undefined) { 
    var myNameSpace = {}; 
} 

文件1:

myNamespace.foo = function()... 

文件2:

myNamespace.bar = function()... 
2

簡單的單獨的文件中這樣定義:

文件1:

var myNamspace = {}; 

文件2:

myNamespace.foo = function()... 

文件3:

myNamespace.boo = function()... 

只要確保你以正確的順序加載文件。

13
// File1: 
// top level namespace here: 
var myNamespace = myNamespace || {}; 

// File2: 
myNamespace.foo = function() { 
    // some code here... 
} 
1
(function (NS) { 
    NS.Uber = function Uber() { 
     this.super = new NS.Super(); // yes, it works! 
    }; // 
}(NS = NS || {})); 

// ------------- other file ----------------- 

(function (NS) { 
    NS.Super = function Super() { 
     this.uber = new NS.Uber(); // yes, it will also work! 
    }; // 
}(NS = NS || {})); 

// -------------- application code ------------ 

var uber = new NS.Uber(); 
console.log(uber.super); 

var super = new NS.Super(); 
console.log(super.uber); 
+0

NS = NS || {}表示它將NS作爲參數發送,如果不存在,則將NS對象分配給一個空對象。 – eavichay 2015-05-12 08:20:16

+0

這觸發一個參考錯誤:嘗試執行的線'}(NS = NS || {}))時NS是未定義的;'[見本的jsfiddle例如](http://jsfiddle.net/6cyrx3ad/) – Eregrith 2015-10-19 14:17:07

8

在每個文件中遵循以下模式:

(function(nameSpace) { 
    nameSpace.foo = function() { ... }; 
})(window.nameSpace = window.nameSpace || {}); 

這種方式的加載順序並不重要。