我喜欢发现一些棘手的新方法。假设您有一个类,其属性设置为构造函数中的参数值,如下所示:
package{
public class SomeClass{
private var someProperty:*;
public function SomeClass(_someProperty:*):void{
someProperty = _someProperty;
}
}
}
这不是一件麻烦事。但想象你有......我不知道,五个属性。也许十个属性。而不是逐行写出每个单独的赋值,是不是有办法循环构造函数的参数并相应地设置新实例上每个相应属性的值?我不认为...rest
或arguments
对象会起作用,因为它们只保留参数的枚举列表,而不是参数名称 - 我认为这样的事情会更好:
for(var propertyName:String in argsAsAssocArray){this[propertyName] = argsAsAssocArray[propertyName];}
......这样的事情存在吗?
不,没有。这是我使用的:
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++];
}
}
您可以查看Haxe。它具有许多优于AS3的优点,并且使用rtti提供了解决这个问题的解决方案,与AS3 rtti不同,它还包含方法参数名称。
使用反射类describeType可能提供有关参数的最有趣的信息,但遗憾的是,属性名称也不存在。