describeType函数在上的定义如下:生成描述ActionScript对象(命令为方法的参数)的XML对象,此方法实现ActionScript语言的反射编程概念。
这个方法的应用场景可能是这样的:
定义一个方法,解析很多邮件的消息,很多消息的内容格式又是一致的(需要实现方法的共用),那么定义下面一系列的方法了。
public function parseEmail_1():void {}
public function parseEmail_2_3_4_5():void {}
public function parseEmail_10_11_12():void {}
…
如何根据邮件格式的消息,直接就调用了相应的函数?那首先需要有一个对象存储了该类的所有方法,然后查找到包含此id的方法,之后调用它即可。
当参数为对象的时候,则返回的 XML 对象包括该类型的所有实例属性,但不包括任何静态属性。.isStatic属性为flase
当参数为类的时候,返回的 XML 对象不仅仅包括类型的静态属性,而且还包括它的所有实例属性。 实例属性嵌套在名为 <factory> 的标签内,从而与静态属性区分开来。 在这种情况下,<type> 标签的 isStatic 属性为 true。
accessor 属性
method 方法
示例:
建立一个名为“describeType_Test”的ActionScript工程。使用describeType(类名)即可获得到该类的所有相关信息
这样,只需要获取到该xml对象下的所有method节点,然后遍历它,匹配到包含该邮件格式id的方法,使用split将方法名分隔开:parseEmail、1、2、…,第一位则为方法名,之后的便是该方法可以解析的指定格式的id,调用this[funName](paras..);
as的示例代码:
package { import flash.display.Sprite; import flash.utils.describeType; import flash.utils.getDefinitionByName; import flash.utils.getQualifiedClassName; import flash.utils.getQualifiedSuperclassName; public class describeType_Test extends Sprite { public function describeType_Test() { //this [object describeType_Test] var clsStr:String = getQualifiedClassName(this); //describeType_Test var supClsStr:String = getQualifiedSuperclassName(this); //flash.display::Sprite var cls:Class = getDefinitionByName(clsStr) as Class; var xml:XML = describeType(cls); trace(xml); } public function parseEmail_1():void { } public function parseEmail_2():void { } public function parseEmail_3():void { } public function parseEmail_4_5_6_7():void { } public function parseEmail_10_101_112():void { } public function parseEmail_13_14_1115():void { } } }