2012-07-04 80 views
1

我有6個函數,分別叫做callClip1,callClip2,callClip3等等。AS3,爲函數名添加變量

我已經計劃在需要時寫出6個else/if語句來調用每一個,但我認爲它可以(可能)以另一種方式完成。我可以調用一個名爲「callClip」的函數,並在其他地方設置的變量末尾添加一個變量嗎?因此,如果變量設置爲3,它會將callClip + 3放在一起並調用該函數?

感謝

回答

4

這可以通過一個開關模塊來完成:

用作:callClip(1);

function callClip(number:int):void 
{ 
    switch(number) 
    { 
     case 1: 
      callClip1(); 
      break; 
     case 2: 
      callClip2(); 
      break; 
     case 3: 
      callClip3(); 
      break; 
     case 4: 
      callClip4(); 
      break; 
     case 5: 
      callClip5(); 
      break; 
     case 6: 
      callClip6(); 
      break; 
    } 
} 

雖然我不會推薦它,這也可以實現爲:

function callClip(number:int):void 
{ 
    this["callClip" + number](); 
} 
+2

尼斯我正要建議你的第二個想法,也不會推薦它:) –

+2

同意,我認爲一般,雖然不是有一堆的功能應該有可能只是一個有這種類型的開關在其中改變功能而不是有一堆功能的副本,並且需要更新switch語句並創建新的功能。如果有足夠的理由這樣做(如callClip1-6都具有非常多變量的功能),那麼這個答案很好。 – shaunhusain

2

添加到傑森的答案,你也可以這樣做:

// Store references to each method. 
var methods:Vector.<Function> = new <Function>[ 
    callClip1, callClip2, callClip3, 
    callClip4, callClip5, callClip6 
]; 


// Call relevant callClip function. 
function callClip(num:int):void 
{ 
    methods[num-1](); 
}