0

给定一个函数

function printAndAdd( s: String, a: int, b: int ) {
  // ...
}

有没有办法在运行时枚举函数的参数(它们的名称和类型)?就像是

for ( var arg: ArgumentDescriptor in printAndAdd ) {
    // arg.type yields the class object of the argument, i.e. 'String' or 'int'.
    // arg.name yields the name of the argument, i.e. 's' or 'a'
}

我有一个具有不同签名的事件处理程序列表,并且我得到了要调用的事件处理程序的名称以及Array对象的名称。我可以只是apply()函数的数组,但我想先做一些错误检查以提供更好的错误消息。

4

1 回答 1

2

您可以使用describeType()查找您要查找的信息。但是,要使其正常工作,该功能必须public. 私有方法不会被describeType().

假设printAndAdd是一个方法MyClass,你可以这样做:

var metadata:XML = describeType(MyClass);
//find all the 'parameter' nodes of any method called 'printAndAdd'
var params:XMLList = metadata..method.(@name == "printAndAdd").parameter;

for each (var param:XML in params) {
    var index:int = param.@index;
    var type:String = param.@type;
    var optional:Boolean = param.@optional == "true";
}

您将无法找到的一件事是参数的名称,但我想它的索引可能足以满足您的目标。

如果您需要比这更强大的反射,请查看as3commons 反射库

于 2012-11-20T17:00:12.093 回答