我在一个命名空间下有多个.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文件的加载顺序。
答案 0 :(得分:4)
听起来你已经知道了选择。
不控制脚本加载顺序。确保每个文件在使用之前初始化命名空间中的每个对象(如您的示例所示)。
保证首先加载的一个文件初始化名称空间。您将名称空间初始化代码放入一个文件中,并确保首先加载该文件。然后其他文件知道命名空间已经初始化,所以他们不必这样做。
有更好的方法吗?
不,不是真的。除了这些选择之外没有捷径可走。如果您不想强制执行任何特定的加载顺序,那么在分配命名空间之前,需要使用样板来初始化命名空间。
还有其他混合选择,例如您定义一个允许您分配给命名空间的函数,如果该命名空间尚不存在,该函数将为您创建命名空间。但当然,你必须确保该功能已经首先加载,所以它并没有真正为你节省太多以上的选择。