我目前正在编写一个 API,它允许用户通过 loadModules() 函数加载模块(以提供一种插件功能):
完整代码:
var LC = (function(){
var alertModule = {
alertName: function(name) {
alert(name);
},
alertDate: function() {
alert(new Date().toUTCString());
}
}
var logModule = {
logName: function(name) {
console.log(name);
},
logDate: function() {
console.log(new Date().toUTCString());
}
}
return {
loadModules: function(moduleList) {
for(var i=0, l=moduleList.length; i<l; i++) {
try {
this[moduleList[i]] = eval(moduleList[i]);
} catch(e) {
throw("Module does not exist");
}
}
}
}
})();
LC.loadModules(['alertModules', 'logModule']);
下面的代码会将 alertModule 和 logModule 对象添加到 LC 对象。
LC.loadModules(['alertModule', 'logModule']);
在 loadModules 方法中,我循环遍历数组并使用以下代码将对象添加到 LC:
this[moduleList[i]] = eval(moduleList[i]);
这工作正常,我相当确定它是安全的(如果模块不存在,则会引发错误),但是有没有更优雅的方式来做到这一点?我能想到的唯一另一种方法是将模块本身放在一个对象中,这样我就可以更容易地引用它们。欢迎任何其他想法/想法!