开发者

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 o开发者_运维知识库r 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?


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.


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

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜