无论如何,有没有自动化的方法,真的很多余。

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函数范围上创建闭包,以确保namedependencies变量得到垃圾回收。但是,此方法较慢,因为它必须执行一些字符串操作。

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

09-16 11:17