无论如何,有没有自动化的方法,真的很多余。
define("simba", ['meta',"slider", "quickview", "share", "mylife"], function(meta, slider, quickview, share, mylife){
var simba = {
meta: meta,
slider: slider,
quickview: quickview,
share: share,
mylife: mylife
};
return simba
});
最佳答案
只是一个想法,但是您可以创建一个autoDefine
函数,该函数将生成一个新函数,然后生成所需的对象。
演示:http://plnkr.co/edit/zLfGkxj21S7B2SaQmMhO?p=preview
第一种方法使用new Function
来避免在autoDefine
函数范围上创建闭包,以确保name
和dependencies
变量得到垃圾回收。但是,此方法较慢,因为它必须执行一些字符串操作。
autoDefine("simba", ['meta',"slider", "quickview", "share", "mylife"]);
function autoDefine(name, dependencies) {
var json = dependencies.join(',').replace(/([^,]+),?/g, '"$1":$1,').replace(/,$/, '');
define(name, dependencies, new Function(dependencies, 'return eval("({"+\'' + json + '\'+"})");'));
}
这是利用闭包的另一种方法,但是,如果RequireJS在执行后不释放工厂函数,则依赖项数组将保留在内存中。
function autoDefine2(name, dependencies) {
define(name, dependencies, function () {
var i = 0,
len = arguments.length,
o = {};
for (; i < len; i++) {
o[dependencies[i]] = arguments[i];
}
return o;
});
}
这是performance tests,表明
autoDefine2
的性能要优于autoDefine
。