import flash.utils.getDefinitionByName; import flash.utils.getQualifiedClassName; import flash.utils.getQualifiedSuperclassName; 1.获取实例的类名: public function getQualifiedClassName(value:*):String 1.获取实例的超类 public function getQualifiedSuperclassName(value:*):String 3.通过类的名字获取到Class对象 public function getDefinitionByName(name:String):Object 4.通过Class对象获取实例 比如 var cls:Class =getDefinitionByName(“mx.controls::TextInput”) as Class; var txtinput:TextInput =new cls() as TextInput; txtinput.text=“test”; co1.addChild(txtinput); 5.获取类的信息:字段、方法 public function describeType(value:*):XML 生成一个 XML 对象来描述参数中指定的 ActionScript 对象, 这个方法使 ActionScript 实现了反射编程的概念. 1. var dummy:Dummy = new Dummy(); var instanceInfo:XML = describeType(dummy); var properties:XMLList = instanceInfo..accessor.(@access != ”writeonly”) + instanceInfo..variable; for each (var propertyInfo:XML in properties) …{ var propertyName:String = propertyInfo.@name; trace(dummy[propertyName]); } 2. var sprite1:Sprite = new Sprite(); var instanceInfo:XML = describeType(sprite1); 3. package …{ import flash.utils.describeType; import flash.utils.getQualifiedClassName; import flash.utils.getDefinitionByName; /** *//** * 使用 flash.utils.describeType 获取类详细信息并缓存 * @author kakera * */ public class TypeDescriptor …{ /** *//** * 缓存已经反射过了的对象 */ private static var typeCache:Object = new Object(); /** *//** * 获取类信息 * @param target 要获取的目标对象 * @return TypeDescriptorEntry 实例 * */ public static function describeType (target:*):TypeDescription …{ var className:String = getQualifiedClassName(target); /** *//** * 检查缓存中是否已经有目标对象项, 如果有就返回缓存中的内容 */ if (className in typeCache) return typeCache[className]; /** *//** * 暂存属性列表 */ var propertyNames:Array = []; /** *//** * 获取类信息, 如果传入的是实例则获取实例类型的类信息 */ var typeInfo:XML = flash.utils.describeType(target is Class ? target : getDefinitionByName(className) as Class); /** *//** * 获取类中所有的属性和访问器 */ var properties:XMLList = typeInfo.factory..accessor.(@access != ”writeonly”) + typeInfo..variable; /** *//** * 遍历并存放到 propertyNames 中 */ for each (var propertyInfo:XML in properties) propertyNames.push(propertyInfo.@name); /** *//** * 创建 TypeDescriptorEntry 的实例并把 propertyNames 等属性丢进去 */ var entry:TypeDescription = new TypeDescription(); entry.name = className; entry.properties = propertyNames; entry.typeInfo = typeInfo; /** *//** * 缓存到 typeCache 中以便下次从缓存中读取 */ typeCache[className] = entry; return entry; } /** *//** * 静态类无须实例化 * @return * */ public function TypeDescriptor () …{ } } } TypeDescription.as, 负责保存信息 package …{ public class TypeDescription …{ /** *//** * 类的属性列表, 包括访问器 (accessor) 和变量 (variable) */ public var properties:Array; /**//* of String */ /** *//** * 类名 */ public var name:String; /** *//** * 由 flash.utils.describeType() 获取的原始 XML 数据 */ public var typeInfo:XML; public function TypeDescription () …{ } } }
more:http://www.ibm.com/developerworks/cn/web/0908_liuqing_flex_reflect/index.html