再次探究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

==================================================

原文地址:https://www.cnblogs.com/cos2004/p/1869409.html