将JavaScript命名空间分割成多个文件

44

假设我有这样的一个命名空间:

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

如何将这段代码拆分成定义foobar的不同文件?

我不用担心加载时间 - 在部署之前,我会将其合并为一个文件。


4
为优秀的问题投赞成票!让我学到了不少好东西。 - Rutwick Gangurde
还提到了:https://dev59.com/IXNA5IYBdhLWcg3wpfmu#4130511 - Ciro Santilli OurBigBook.com
5个回答

48

在每个文件的开始处:

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

文件1:

myNamespace.foo = function()...

文件2:

myNamespace.bar = function()...

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

// File2:
myNamespace.foo = function() {
    // some code here...
}

8

每个文件都按照这个模式进行:

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

这种方式加载顺序并不重要。


3

请将简单定义放在单独的文件中,例如:

文件1:

var myNamspace = {};

文件2:

myNamespace.foo = function()...

文件3:

myNamespace.boo = function()...

请确保按正确顺序加载文件。


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);

NS = NS || {} 的意思是将 NS 作为参数发送,如果不存在,则将空对象分配给 NS。 - eavichay
1
当尝试执行行 }(NS = NS || {})); 时,会触发引用错误:NS未定义(请参见此jsfiddle示例)。 - Eregrith

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接