ActionScript-3 cannot have multiple constructors?

11,383

Solution 1

No you can't have multiple contructor neither the same function with different signature, but you can use default arguments :

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

then you can call new Shard() or new Shard(100) or new Shard(100, 200)

or you can also use variable arguments:

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

Solution 2

It's even broader than that. AS3 has no support at all for function overloading.

You can simulate the appearance of multiple constructors with parameter defaults and/or dynamically dispatching the parameters to various init methods. Alternatively, custom object factories or static creation methods could help.

Share:
11,383

Related videos on Youtube

The Student
Author by

The Student

Updated on August 25, 2020

Comments

  • The Student
    The Student over 3 years

    I have

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

    And I got on the second constructor:

    Multiple constructor definitions found. Constructor may not be defined in code.

    So, ActionScript-3 cannot have multiple constructors?

    • timrwood
      timrwood over 13 years
      Why do you want multiple constructors? Are some of the parameters optional?
  • Juan Pablo Califano
    Juan Pablo Califano over 13 years
    +1. I've used static methods for initializing and returning a new instances (kind of like factories). Generally, these methods are defined in the same class and are only meant to simplify the interface for the calling code. It's a simple and effective workaround in some cases (though if you want to have different of these "constructors" you have to do the name mangling since the compiler doesn't do it for you)