很多时候,我们知道了知道了一个类、方法(函数)或变量的字符串,如何根据名字获取类实例,调用相应的方法,获取变量值呢?
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.csdn.net/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]