【转】Flex 中用类名反射出类实例(getDefinitionByName)
来源:互联网 发布:虚拟宇宙软件 编辑:程序博客网 时间:2024/05/17 06:52
public function getDefinitionByName(name:String):Object
返回参数 name 中指定的类引用
参数 name:String - 类名称
返回 Object - 返回参数 name 中指定的类引用
错误 ReferenceError - 找不到参数 name 对应的公共定义
as3中的getDefinitionByName函数是 返回 name 参数指定的类的类对象引用。
这样就可以使用这个方法根据已知类的路径的字符串来获取类的类对象引用。这样就可以利用这个特性让flash动态创建类的实例...
但问题是:
1. 使用getDefinitionByName方法获得的类必须是在发布的时候被编译到swf文中的,否则就会报错:"ReferenceError: Error #1065: 变量 <类的名字> 未定义。"
2. 由于使用import导入的类(只是作为查找类的路径)并不会在发布swf的时候被编译进去(当然flash.*包里面的类本身就是player中的),只用在代码中使用到的类才会被编译进去...
那么,要使用这个方法来实现动态执行怎么办? 只有把可能需要的所有类包含在代码中(比如在定义变量的类型声名时使用 *),并且在开始声名此类,声名时可以随便使用个名字,这样才能使用getDefinitionByName方法...
实际上getDefinitionByName所获得的类名就是前面你所做的声名的名字引用
-------------------------------------------------
import com.ooph.parser.*;
//包内有ParserWeb类
var ss:ParserWeb;
//在此处声名ParserWeb类,名为ss(名字不用与下面实例名的相同)
var sortStr:String="Web";
var P:Class = getDefinitionByName("com.ooph.parser.Parser"+sortStr) as Class;
//注意这里要写完整的类路径 "com.ooph.parser.Parser"+sortStr
var newParser:* = new P();
getDefinitionByName(name) 返回 name 参数指定的类的类对象引用。
经过测试只能获取内置的类,不能获取自定类,怎么解决呀??
其实最终问题是,知道类名,但是为字符串,如何获取它?因为数量不定放在XML中配置的。
因为内置类库肯定会被编译到swf里,这样反射就能拿到。而自定义的类,如果整个工程里都没有用到,即使import也不会被编译(不然swf里的垃圾成分太多)。我建议可以把需要反射的类库生成一个swf去载入,或者在工程的什么地方引用一下。
getDefinitionByName () 函数
public function getDefinitionByName(name:String):Object
语言版本 : ActionScript 3.0 RuntimeVersions: AIR 1.0, Flash Player 9
返回 name
参数指定的类的类对象引用。
参数
name:String
— 类的名称。 返回
Object
— 返回 name
参数指定的类的类对象引用。 引发
ReferenceError
— 不存在具有指定名称的公共定义。 示例
GetDefinitionByNameExample
类在舞台上创建一个橙色的正方形。这是使用以下步骤完成的: - 声明代表橙色背景颜色和 80 像素大小的变量,这些变量稍后将用于绘制正方形。
- 在构造函数内,将 Class 类型的变量
ClassReference
赋予 Sprite。 - 对名为
instance
的 ClassReference 的实例进行实例化。 - 由于
instance
按引用是 Sprite 对象,因此可以使用可用于 Sprite 的方法绘制正方形并将其添加到显示列表。
package { import flash.display.DisplayObject; import flash.display.Sprite; import flash.utils.getDefinitionByName; public class GetDefinitionByNameExample extends Sprite { private var bgColor:uint = 0xFFCC00; private var size:uint = 80; public function GetDefinitionByNameExample() { var ClassReference:Class = getDefinitionByName("flash.display.Sprite") as Class; var instance:Object = new ClassReference(); instance.graphics.beginFill(bgColor); instance.graphics.drawRect(0, 0, size, size); instance.graphics.endFill(); addChild(DisplayObject(instance)); } } }
原文地址:http://topmanopensource.javaeye.com/blog/437508
- Flex 中用类名反射出类实例(getDefinitionByName)
- 【转】Flex 中用类名反射出类实例(getDefinitionByName)
- AS3获取对象类名,getDefinitionByName,getQualifiedClassName,getQualifiedSuperclassName
- getDefinitionByName动态创建类。
- Java反射---根据类名创建实例
- 类名反射&&方法反射
- C# 反射 通过类名创建类实例
- Java 反射 根据类名创建类实例
- 通过反射根据类名获取到类的实例
- C# 反射 通过类名创建类实例
- C# 反射 通过类名创建类实例
- C# 反射通过类名实例化类
- C# 反射 通过类名创建类实例
- C# 反射通过类名实例化类
- Java反射,根据类名创建带参数的实例
- Java反射,根据类名创建带参数的实例
- Java反射,根据类名创建带参数的实例
- 传入类名,通过反射,将泛型实例化
- ASP.net 多种方式读取GridView某行的值
- java实战(二)--------java程序的运行
- 关于flex得绑定 [bindable]
- flex 库swc
- ArrayList ArrayCollection
- 【转】Flex 中用类名反射出类实例(getDefinitionByName)
- linux 系统函数之 (dirname, basename)
- iPhone Push消息全攻略.1
- ActionScript 3.0的参数传递方式
- actionscript 块级作用域
- StarUML---推荐一款UML工具(很好很强大)
- 认识java的Class类
- Java中的Class类
- flex actionscript Class类 与loader swf文件