2010-08-24 17 views
26

Ich habeActionScript-3 kann nicht mehrere Konstruktoren haben?

public function Shard() { 
    } 

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

Und ich habe auf dem zweiten Konstruktor:

Mehrere Konstruktor Definitionen gefunden. Der Konstruktor darf nicht in code definiert werden.

Also kann ActionScript-3 nicht mehrere Konstruktoren haben?

+1

Warum möchten Sie mehrere Konstruktoren? Sind einige der Parameter optional? – timrwood

Antwort

33

Nein mehrere contructor nicht haben können weder die gleiche Funktion mit verschiedenen Unterschrift, aber Sie können Standardargumente verwenden:

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

dann können Sie new Shard() oder new Shard(100) oder new Shard(100, 200)

oder Sie können anrufen Verwenden Sie auch variable Argumente:

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

Es ist sogar noch breiter. AS3 hat keine Unterstützung für function overloading.

Sie können das Aussehen mehrerer Konstruktoren mit Parameterstandards simulieren und/oder die Parameter dynamisch an verschiedene init Methoden senden. Alternativ können benutzerdefinierte Objektfactorys oder statische Erstellungsmethoden hilfreich sein.

+2

+1. Ich habe statische Methoden zum Initialisieren und Zurückgeben einer neuen Instanz (Art von Fabriken) verwendet. Im Allgemeinen sind diese Methoden in derselben Klasse definiert und sollen nur die Schnittstelle für den aufrufenden Code vereinfachen. Es ist eine einfache und effektive Problemumgehung in einigen Fällen (obwohl, wenn Sie verschiedene dieser "Konstruktoren" haben möchten, müssen Sie den Namen Mangling tun, da der Compiler es nicht für Sie tut) –

Verwandte Themen