我们有一些 js 代码拆分在许多文件中。我们有一个核心文件,它定义了许多其他 js 文件使用的代码。
目前我们有这样的事情:
核心.js:
window.mycore = function() {
var myfunction1 = function() {
};
var myfunction2 = function() {
};
var myfunction3 = function() {
//..
var a = myfunction1(b);
//..
};
//...
// many "myfunction"
//...
var myfunctionN = function() {
};
var publish = function() {
for(var i = 0; i < arguments.length; i++) {
try {
window.mycore[arguments[i]] = eval('(' + arguments[i] + ')');
}
catch(e) {
Log.err(600, arguments[i], e);
}
}
};
publish("myfunction1", "myfunction7", "myfunction8",/*...*/"myfunctionM")
}
应用程序.js:
// ...
// ...
var result = window.core.myfunction1("myparam");
// ...
// ...
请注意,没有核心方法被声明为 window.core 对象的成员。相反,它们通过发布功能附加到核心对象。
这有一些优点:
- 核心代码可以引用任何核心函数,无需编写“window.core”。
- 我们避免在每个公共函数声明中写“var myfunction = window.mycore.myfunction = function() ...”
- 可以看到暴露的方法是集中的。
但是,在发布函数中使用 eval 给我们在使用代码分析工具时带来了问题,因为它们往往不理解 eval 声明。
所以,这是我的问题。哪个是改进此代码的更好方法,因此我们可以保留提到的优点但消除 eval 声明。我知道将一些名称/值对发送到发布函数的解决方案,例如 publish({'myfunction1': myfunction1}, ... ),但我也想避免函数名称重复。考虑到我不是在寻找根本性的变化,因为已经编写了很多代码。
谢谢!