使用字符串 "Sprite" 获取类 Sprite,用 getDefinitionByName() 函数即可。
如:
var ClassReference:Class = getDefinitionByName("flash.display.Sprite") as Class;
var a:ClassReference = new ClassReference ();
可以生成一个名为 a 的 Sprite 对象。
这是内置类的情况,如果是自定义的类,如 myClass 类,使用 getDefinitionByName 获取时可能会出现 "变量 myClass 未定义" 的异常,为什么会弹出这样的异常呢?这要谈谈 Flash 的编译机制,内置类应该是编译到 FlashPlayer 中的,而我们自定义的类如果只是 import 而没有使用过他就不会被编译到 swf 中,这是出于减小 swf 文件大小的考虑。如果 myClass 没有被编译到生成的 swf 中,自然 getDefinitionByName 就无法获取它了,所以我们在使用 getDefinitionByName 获取它之前可以先声明一个它的对象,可以不用将其实例化。
如:
import cn.wizardc.myClass;//仅仅是指示其包地址,没有将 myClass 编译到 swf 中。
var a:myClass;//使用到 myClass 类,将其编译到 swf 中,没有这句,下面的获取脚本会抛出 "变量 myClass 未定义!" 异常。
var ClassReference:Class = getDefinitionByName("cn.wizardc.myClass") as Class;//通过字符串获取类对象。
var a:ClassReference = new ClassReference ();//生成其实例。
好了,最后,看看如何获取 myClass 里的一个静态方法和方法:
ClassReference[staticFunc]();//静态方法。
a[func]();//普通方法。