我在一个名称空间下有多个.js文件,假设我的名称空间是foo,在每个文件中我都有如下代码:

在文件utils.js

(function() {

    window.foo = window.foo || {};
    foo.utils = foo.utils || {};
    foo.bar = foo.bar || {};

    var utils = foo.utils;
    var bar = foo.bar;

    utils.helper1 = function(abc) {

        var xyz = bar(abc);
        ...
    }

})();


基本上,在每个js文件中,我都希望具有var utils = foo.utils之类的代码,因此不必每次都编写foo.utils。但是然后我必须在顶部写foo.utils = foo.utils || {};,因为utils.js可能尚未加载。

我认为解决此问题的一种方法是拥有一个头文件,并确保始终首先加载它,它基本上在我的命名空间下声明了所有公共函数,如下所示:

window.foo = windown.foo || {};
foo.bar = {};
foo.baz = {};
foo.utils = {};


有更好的办法吗?我不想确保我的js文件的加载顺序。

最佳答案

听起来您已经知道选择了。


脚本加载顺序不受控制。您必须确保每个文件都在使用命名空间之前初始化每个对象(如您的示例所示)。
确保首先加载的一个文件会初始化名称空间。您将名称空间初始化代码放入一个文件中,并确保首先加载该文件。然后,其他文件知道名称空间已被初始化,因此它们不必这样做。



  有更好的办法吗?


不,不是。除了这些选择,没有捷径可走。如果您不想强制执行任何特定的加载顺序,则需要样板初始化名称空间,然后再分配给该名称空间。

还有其他混合选择,例如您定义一个函数,该函数可让您分配给名称空间,如果该功能尚不存在,该函数将为您创建名称空间。但是,然后当然,您必须确保该函数也已首先加载,因此在上述选项中并不能真正为您节省很多。

关于javascript - JavaScript头文件是否必要?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35529698/

10-08 22:24
查看更多