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

26

I have

    public function Shard() {
    }

    public function Shard(x:Number, y:Number, vx:Number, vy:Number, rotation:Number, spin:Number)
    {
      ...
    }

我接下来遇到了第二个问题:

发现多个构造函数定义。 构造函数可能无法在代码中定义。

所以,ActionScript-3不能有多个构造函数吗?


1
你为什么想要多个构造函数?有些参数是可选的吗? - timrwood
2个回答

33

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

public function Shard(x:Number=NaN, y:Number=NaN) {
  //...
}

那么你可以调用 new Shard() 或者 new Shard(100) 或者 new Shard(100, 200)

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

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

12

它甚至比那更广泛。AS3完全不支持函数重载

您可以通过参数默认值和/或动态分派参数到各种init方法来模拟多个构造函数的外观。或者,自定义对象工厂或静态创建方法也可以帮助实现。


2
+1. 我已使用静态方法进行初始化并返回新实例(类似于工厂)。一般来说,这些方法被定义在同一个类中,只是为了简化调用代码的接口。在某些情况下,这是一种简单有效的解决方法(尽管如果您想要有不同的“构造函数”,则必须进行名称混淆,因为编译器不会为您执行此操作)。 - Juan Pablo Califano

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接