0
我以未确定的顺序加载了我的JavaScript。我有一个名称空间函数来注册名称空间。例如,它可以编写这样的事:以随机顺序加载的Javascript无法初始化
"com.stackoverflow.question".namespace(new function() {
this.sayHelloTo = function(text) { alert("Hello" + text); }
});
不幸的是,namespace.js
并不总是首先加载,如加载顺序是随机的,但其他脚本使用的命名空间功能。有没有办法实现这一点,而不会得到错误“.namespace
”ist不是一个函数?
所以必须有一种方法来初始化后面的sayHelloTo
定义,我有一切都是加载事件。所以即将发表的声明有效,但我认为这非常丑陋。
var postInit = postInit || [];
postInit.push(function() {
"com.foo.bar".namespace(new function() {
this.sayHelloTo = function(text) { alert(text); }
});
});
而当事件发生时:
list.foreach(function(k, v) { v.call(); });
有没有什么更好的方法来实现这一目标?
对不起,我忘了提及我不能在自己的JavaScript包括。我不在浏览器环境中,我在一个框架中,js文件以随机顺序编译。所以我没有访问权限或可能性来加载/需要脚本。 – codevour
什么样的框架包含随机顺序的js文件?你在用什么? – manzoid
它稍微复杂一些,但同样的原则适用。您也可以将一个库复制并粘贴到您坚持使用的代码中(没有任何关于需求的浏览器)。 将每个具有依赖项的函数都包装在一个外部函数中,然后将该外部函数附加到加载依赖项时处理的队列中(如果您对它们适用,则使用事件)。如果由于某种原因你甚至无法做到这一点,那么轮询命名空间定义可能是唯一的选择,并在那个时候处理队列。 –