如何改进这个javascript代码

时间:2014-06-05 04:06:19

标签: javascript angularjs

我正在构建一个节点/角度应用程序。我不习惯javascript。我为所有静态列表对象提供了服务。我试图使这段代码尽可能通用。我想我可以改进它。这就是我现在所拥有的(我只放了2个,但我会有更多):

function returnSolList (n, $resource) {
    return $resource(n+'/', {}, {'query' : {method : 'GET', cache : true, isArray:true } });
}

mod.factory('Cities', ['$resource', function($resource) {return returnSolList('cities', $resource);}]);
mod.factory('Boites', ['$resource', function($resource) {return returnSolList('boites', $resource);}]);

我想我可以通过在列表['城市' Boites']中宣布我的服务然后循环建立工厂来做得更好。 还有我希望摆脱的$ resource中的冗余。

但我不知道该怎么做。

1 个答案:

答案 0 :(得分:2)

您可以在数组中添加'cities', 'boites',...并使用for生成代码,但这有点复杂。你真的想要吗?

function returnSolList (n, $resource) {
    return $resource(n+'/', {}, {'query' : {method : 'GET', cache : true, isArray:true } });
}

var names = ['Cities','Boites'];
for(var i=0; i<names.length; i++){
    mod.factory(
        names[i],
        [
            '$resource',
            (function(name){
                return function($resource){
                    return returnSolList(name, $resource);
                }
            })(names[i].toLowerCase())
        ]
    );
}

复杂的部分是你需要返回一个函数,该函数在我正在改变的时候使用一个在for中使用i的变量。您需要将i传递给函数,以便将其保存在本地(在范围内)。


有关javascript闭包的更多信息:How do JavaScript closures work?

对于javascript代码缩小/加速检查Closure Compiler