ActionScript-3不能有多个构造函数?

Tom*_*ito 26 flash actionscript-3

我有

    public function Shard() {
    }

    public function Shard(x:Number, y:Number, vx:Number, vy:Number, rotation:Number, spin:Number)
    {
      ...
    }
Run Code Online (Sandbox Code Playgroud)

我得到了第二个构造函数:

找到了多个构造函数定义.可能未在代码中定义构造函数.

那么,ActionScript-3不能有多个构造函数?

Pat*_*ick 33

不,你不能有多个构造函数既不具有不同签名的相同函数,但你可以使用默认参数:

public function Shard(x:Number=NaN, y:Number=NaN) {
  //...
}
Run Code Online (Sandbox Code Playgroud)

然后你可以打电话new Shard()new Shard(100)new Shard(100, 200)

或者你也可以使用变量参数:

public function Shard(...args){
 if (args.length==0) {
   //...
 } else {
  //...
  var firstArg:Object=args[0];
  //...
 }
}
Run Code Online (Sandbox Code Playgroud)


Gun*_*r47 12

它甚至比那更广泛.AS3根本不支持函数重载.

您可以使用参数默认值模拟多个构造函数的外观和/或将参数动态分派给各种init方法.或者,自定义对象工厂或静态创建方法可以提供帮助.

  • +1.我已经使用静态方法初始化并返回一个新实例(有点像工厂).通常,这些方法在同一个类中定义,仅用于简化调用代码的接口.在某些情况下,这是一个简单而有效的解决方法(尽管如果你想拥有不同的这些"构造函数",你必须进行名称修改,因为编译器不会为你做这个) (2认同)