加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

FLEX 反射

发布时间:2020-12-15 01:22:03 所属栏目:百科 来源:网络整理
导读:原文地址:http://xiejiangbo.iteye.com/blog/599679 import flash.utils.getDefinitionByName; import flash.utils.getQualifiedClassName; import flash.utils.getQualifiedSuperclassName; 1.获取实例的类名: public function getQualifiedClassName(val

原文地址:http://xiejiangbo.iteye.com/blog/599679 import flash.utils.getDefinitionByName; import flash.utils.getQualifiedClassName; import flash.utils.getQualifiedSuperclassName; 1.获取实例的类名: public function getQualifiedClassName(value:*):String 2.获取实例的超类 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 () …{ } ?? ?} }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读