再次探究As3.0的反射机制
之前又转载过通过类路径+类名的方式来生产实例(用getDefinitionByName方法)的文章。今天没事又研究了一下这个函数。
先看之前的例子:
var tf:Class = getDefinitionByName("flash.text.TextField") as Class; var mytf:Object= new tf(); mytf.text = "哈哈哈"; trace(mytf is TextField);//输出true addChild(mytf);//报错,原因可能是系统以为mytf是Object类而不能调用DisplayObject的方法addChild,但是上面为什么会输出true我也不太清楚
//addChild(mytf as DisplayObject);//这种方法可以正确显示,如果是以这种方式添加到显示列表时则会转换类型,利用了as关键字
再看我把Object改为*:
var tf:Class = getDefinitionByName("flash.text.TextField") as Class; var mytf:*= new tf(); mytf.text = "哈哈哈"; trace(mytf is TextField);//输出true addChild(mytf);//可以正常显示,当上面未声明类型时,系统会自动将该实例的类型转为getDefinitionByName参数中的类
看来为了省事可以把类型声明为*类型,这样后续的操作就不会因为类型不对而烦恼了。
以上纯属个人意见,有错请指正。
==================================================
作者:绿色花园
出处:http://www.cnblogs.com/cos2004/archive/2010/11/04/1869409.html
==================================================