2010-08-24 64 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