0

具体来说,我有一个迭代对象文字的函数:

    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中的可能参数或参数?

4

1 回答 1

0

第三个论点可能是最简单的。如果您不想使用它,一种可能性是传递一个参数的函数,然后调用两个参数的操作方法。

forEachIn(
    objectList,
    function(equipment) { initEquipAnimations(equipment, animations); }
);

假设animations设置为要使用的动画,这将创建一个闭包。请注意,如果animations可能在迭代期间发生变化,您可能需要创建另一个闭包来使用 IIFE 捕获值:

forEachIn(
    objectList,
    (function(anims) {
        return function(equipment) { initEquipAnimations(equipment, anims); }
    }(animations))
);

另一种可能性是,如果您可以灵活地将参数重新排序为initEquipAnimation,则将函数绑定到前导参数,只留下forEachIn迭代提供的设备。

initEquipAnimation : function(animations, equipment) { . . . }

forEachIn(objectList, initEquipAnimation.bind(null, animations));
于 2013-07-08T02:39:59.563 回答