Matt Lohkamp
Matt Lohkamp

Reputation: 2192

Flash AS3: automate property assignment to new instance from arguments in constructor

I like finding out about tricky new ways to do things. Let's say you've got a class with a property that gets set to the value of an argument in the constructor, like so:

package{
 public class SomeClass{
  private var someProperty:*;
  public function SomeClass(_someProperty:*):void{
   someProperty = _someProperty;
  }
 }
}

That's not exactly a hassle. But imagine you've got... I don't know, five properties. Ten properties, maybe. Rather then writing out each individual assignment, line by line, isn't there a way to loop through the constructor's arguments and set the value of each corresponding property on the new instance accordingly? I don't think that the ...rest or arguments objects will work, since they only keep an enumerated list of the arguments, not the argument names - I'm thinking something like this would be better:

for(var propertyName:String in argsAsAssocArray){this[propertyName] = argsAsAssocArray[propertyName];}

... does something like this exist?

Upvotes: 0

Views: 701

Answers (2)

back2dos
back2dos

Reputation: 15623

No, there isn't. Here's what I use though:

class A {
    private var arg1:Type1;
    private var arg2:Type2;
    private var arg3:Type3;
    private var arg4:Type4;
    private static const PARAMS:Array = "arg1,arg2,arg3,arg4".split(",");
    public function A(arg1:Type1, arg2:Type2, arg3:Type3, arg4:Type4) {
        var i:uint = 0;
        for each (var name:String in PARAMS) this[name] = arguments[i++];
    }
}

You may want to check out Haxe. It has many advantages over AS3 and provides a solution even to this problem, using rtti, which unlike AS3 rtti also contains method parameter names.

Upvotes: 1

Theo.T
Theo.T

Reputation: 9267

Using the reflection class describeType probably provides the most interesting information regarding the arguments, still unfortunately the property names aren't there either.

Upvotes: 0

Related Questions