如何在ActionScript中重载函数?

AS3*_*Guy 11 actionscript overloading actionscript-3

我想要一个能够采用各种类型的功能.AS3不支持直接重载...所以我不能执行以下操作:

//THIS ISN'T SUPPORTED BY AS3

function someFunction(xx:int, yy:int, someBoolean:Boolean = true){
    //blah blah blah
}
function someFunction(arr:Array, someBoolean:Boolean = true){
    someFunction(arr[0], arr[1], someBoolean);
}
Run Code Online (Sandbox Code Playgroud)

我如何解决它仍然有一个能够采取各种类型的参数的功能?

zzz*_*Bov 21

如果您只想接受任何类型,可以使用*以允许任何类型:

function someFunction( xx:*, yy:*, flag:Boolean = true )
{
  if (xx is Number) {
    ...do stuff...
  } else if (xx is String) {
    ...do stuff...
  } else {
    ...do stuff...
  }
}
Run Code Online (Sandbox Code Playgroud)

如果您有大量各种参数,其中顺序不重要,请使用选项对象:

function someFunction( options:Object )
{
  if (options.foo) doFoo();
  if (options.bar) doBar();
  baz = options.baz || 15;
  ...etc...
}
Run Code Online (Sandbox Code Playgroud)

如果您有可变数量的参数,则可以使用...(rest)参数:

function someFunction( ... args)
{
  switch (args.length)
  {
    case 2:
      arr = args[0];
      someBool = args[1];
      xx = arr[0];
      yy = arr[1];
      break;
    case 3:
      xx = args[0];
      yy = args[1];
      someBool = args[2];
      break;
    default:
      throw ...whatever...
  }
  ...do more stuff...
}
Run Code Online (Sandbox Code Playgroud)

对于需要为多个类调用公共函数的情况,应指定每个类共有的接口:

function foo( bar:IBazable, flag:Boolean )
{
  ...do stuff...
  baz = bar.baz()
  ...do more stuff...
}
Run Code Online (Sandbox Code Playgroud)