2010-08-24 27 views
26

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

public function Shard() { 
    } 

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

我的第二个构造有:

多重构造定义 发现。代码中可能未定义构造函数 。

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

+1

为什么你想要多个构造函数?有些参数是可选的吗? – timrwood 2010-08-24 19:18:08

回答

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根本不支持function overloading

您可以模拟具有参数默认值的多个构造函数的外观和/或动态分配参数到各种方法。或者,自定义对象工厂或静态创建方法可以提供帮助。

+2

+1。我用静态方法来初始化和返回一个新的实例(类似工厂)。通常,这些方法是在同一个类中定义的,只是为了简化调用代码的接口。在某些情况下,这是一种简单而有效的解决方法(尽管如果你想拥有不同的这些“构造函数”,那么你必须执行名称重组,因为编译器不会为你做) – 2010-08-24 20:06:42