很多时候,我们知道了知道了一个类、方法(函数)或变量的字符串,如何根据名字获取类实例,调用相应的方法,获取变量值呢?
Convert string to class
获得某个实例对象的类:
实例名["constructor"];
实例名.constructor;
获得某个实例对象的类名:
getQualifiedClassName (对象实例名)
进一步解释如下
getQualifiedClassName (value:*)
参数value手册上说:可以将任何 ActionScript 值传递给此方法,包括所有可用的 ActionScript 类型、对象实例、原始类型(如 uint)和类对象。示例如下:
trace(getQualifiedClassName(“abc”)); //输出 String
trace(getQualifiedClassName(1)); //输出 int
根据类名获得类:
getDefinitionByName(完全限定类名称的字符串表达式);
注意,这里的类名称需要有包路径的限定,如”flash.display.Sprite”,也可以这样写”flash.display::Sprite”,自定义的类也一样,当然如果自定义的类在根包,或是在fla的库里定义的类,或者是ActionScript的原始类型,则可以直接写类名字符串。
用得到的类实例化对象:
一般中间要用一个无类型变量传递类,进行实例化;
如:
var i=0;
var c:*=getDefinitionByName(“MyClass”+i);
var myClass:*=new c();
更多请查看我的另一文章:http://blog.youkuaiyun.com/dengxingbo/archive/2010/05/24/5619510.aspx
Convert string to function
先看一示例:
关于Function call和applay的应用请参考:
http://help.adobe.com/zh_CN/AS3LCR/Flash_10.0/Function.html#call()
Convert string to variable
var object:Object = new Object();
var movie:MovieClip = new MovieClip();
for(var i:int = 1;i<10;i++){
object["x"+i] = movie;
}
trace(object.x1);
trace(object.x2);
trace(object.x3);
trace(object.x4);
trace(object.x5);
trace(object.x6);
trace(object.x7);
trace(object.x8);
trace(object.x9);
注意,上面的只是声明了9个movie的引用,并不是生成了9个同样的实例,换句话说,你一旦修改movie的原型,这9个复制品都会有相应的改动。
调用本类的属性,可使用 this[variable_name]
本文介绍在ActionScript 3中如何通过字符串动态获取类实例、调用方法及访问变量值。涵盖getDefinitionByName与getQualifiedClassName等关键API的使用方法。
174

被折叠的 条评论
为什么被折叠?



