假设我有一个对象:

var shapes = {
     addTriangle: function(color){
         console.log("added " + color + " triangle");
     },
     addSquare: function(color){
         console.log("added " + color + " square");
     }
}


该对象将具有经常更改和更新的方法,但是所有方法将始终按顺序运行。有没有一种方法可以自动获取并运行所有方法,从而简化可维护性?
就像是:

function runShapes(color){
    shapeNames = Object.getOwnPropertyNames(shapes);
    for(i = 0; i < shapeNames.length; i++){
        shapeNames[i].apply(color);
    }
}


这给出了“ shapeNames [i] .apply不是函数”。告诉我如何通过函数式编程而不是for循环来做到这一点的要点:)

Codepen:

http://codepen.io/anon/pen/mJxVyE

最佳答案

首先是您的错误...您正在遍历属性名称,而不是属性。

shapeNames[i].apply(color);


应该:

shapes[shapeNames[i]](color);


更具功能性的版本可能如下所示:

function runShapes(color){
    Object.keys(shapes).forEach(function(each){
        shapes[each](color);
    });
}

07-24 17:24
查看更多