我在一个名称空间下有多个.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/