动态获取类名称, 超类 (Superclass) 名称 有点像之前版本中的 typeof, 这个方法返回的是字符串
QUOTE: ------------------------------------------------------------ public function getQualifiedClassName(value:*):String 返回类的完全限定名 (fully qualified class name, qualified 我不知道怎么翻了..)
参数 value:* - 想要得到完全限定名的对象. 他可以是任何 ActionScript 类型, 对象实例, 简单类型如 uint 以及类类型. 返回 String - 包含类的完全限定名的字符串 ------------------------------------------------------------
QUOTE: ------------------------------------------------------------ public function getQualifiedSuperclassName(value:*):String 返回目标对象基类的完全限定名, 本函数提供比 describeType 更简便的方法来获取基类的名称 提示: 本函数限制只寻找实例的继承层次,而 describeType() 函数使用的是类对象继承. 调用 describeType() 函数时返回的是基于超类以的类继承结构. 而 getQualifiedSuperclassName() 将忽略类的继承结构直接返回最接近的继承对象 例如, 理论上 String 类继承自 Class, 但调用 getQualifiedSuperclassName(String) 时返回的是 Object. 换句话说, 不管你传递的是类还是类的实例, 他们的返回值都是一样的
参数 value:* - 任何值. 返回 String - 基类的完全限定名, 如果没有的话返回 null ------------------------------------------------------------
例子:
实例化新的 Sprite, 然后获取他的类名并输出
var sprite1:Sprite = new Sprite(); var classNameOfSprite:String = getQualifiedClassName(Sprite); trace("Sprite 的类名 : " + classNameOfSprite); // Sprite 的类名 : flash.display::Sprite
超类
var superclassNameOfSprite:String = getQualifiedSuperclassName(Sprite); trace("Sprite 的超类 (基类) 类名 : " + superclassNameOfSprite); // Sprite 的超类 (基类) 类名 : flash.display::DisplayObjectContainer
根据刚刚获取的类名使用 创建实例
var SpriteClass:Class = getDefinitionByName(classNameOfSprite) as Class; var sprite2:Sprite = new SpriteClass() as Sprite; trace("sprite2 通过 getDefinitionByName 创建 Sprite 实例");
画一个 100 x 100 的矩形并显示
sprite2.graphics.beginFill(0xFF00FF); sprite2.graphics.drawRect(0, 0, 100, 100); sprite2.graphics.endFill(); addChild(sprite2);
修改后的 ReflectionSample.as
代码拷贝框
[Ctrl+A 全部选择 然后拷贝]
出处:蓝色理想
责任编辑:moby
上一页 AS3 中的反射 [2] 下一页 AS3 中的反射 [4]
◎进入论坛Flash专栏版块参加讨论
|