假设我有一个对象:
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);
});
}