2013-07-08 67 views
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之後傳遞另一個對象或數組中的可能參數或參數?

回答

0

第三個參數可能是最簡單的。如果你不想使用它,一種可能性是傳遞一個參數的函數,然後調用雙參數動作方法。

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

這就產生了一個封閉假設animations被設置爲動畫中使用。請注意,如果animations可能迭代期間改變,你可能需要創建另一個封閉使用IIFE捕捉值:

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

另一種可能性是,如果你有重新排序參數的靈活性initEquipAnimation,是將函數綁定到主要參數,只留下由迭代提供的設備。

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

forEachIn(objectList, initEquipAnimation.bind(null, animations)); 
+0

啊!你的第一種方法將爲我工作。 '動畫'將被設置,並且在迭代過程中不會改變,所以它會沒事的。 –

+0

(Stack Overflow不允許我編輯我的評論...) 我確實繼續閱讀了立即調用函數表達式。我相信,未來這對我來說會派上用場。再次感謝! –

相關問題