具体来说,我有一个迭代对象文字的函数:
forEachIn: function(objList, action) {
for (var thing in objList) {
if (objList.hasOwnProperty(thing)) {
action(objList[thing]);
}
}
},
但是在每个属性上调用的action
需要另一个参数animations
:
initEquipAnimation: function(equipment, animations) {
if (typeof equipment !== 'undefined' &&
equipment !== null) {
if (equipment.setAnimation) {
console.log("Setting animation for: " + equipment);
equipment.setAnimation(animations)
}
}
},
如何在不必编辑forEachIn
函数的情况下传递第二个参数?或者我应该做些什么,在参数action
之后传递另一个对象或数组中的可能参数或参数?
答案 0 :(得分:0)
第三个论点可能是最简单的。如果你不想使用它,一种可能性是传递一个参数的函数,然后调用双参数动作方法。
forEachIn(
objectList,
function(equipment) { initEquipAnimations(equipment, animations); }
);
这会创建一个闭包,假设animations
设置为要使用的动画。请注意,如果animations
在迭代期间可能会有所不同,您可能需要创建另一个闭包以使用IIFE捕获值:
forEachIn(
objectList,
(function(anims) {
return function(equipment) { initEquipAnimations(equipment, anims); }
}(animations))
);
另一种可能性是,如果您可以灵活地将参数重新排序到initEquipAnimation
,那么就是将函数绑定到前导参数,只留下由forEachIn
迭代提供的设备。 / p>
initEquipAnimation : function(animations, equipment) { . . . }
forEachIn(objectList, initEquipAnimation.bind(null, animations));