2012-07-04 77 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](); 
}