actionscript 3.0 动态特性 动态获取类、方法、变量

来源:互联网 发布:知乎 孔子姓什么 编辑:程序博客网 时间:2024/06/05 01:20

很多时候,我们知道了知道了一个类、方法(函数)或变量的字符串,如何根据名字获取类实例,调用相应的方法,获取变量值呢?

 

Convert string to class

 

获得某个实例对象的类:

实例名["constructor"];

实例名.constructor;

获得某个实例对象的类名:

getQualifiedClassName (对象实例名)

进一步解释如下

getQualifiedClassName (value:*)

参数value手册上说:可以将任何 ActionScript 值传递给此方法,包括所有可用的 ActionScript 类型、对象实例、原始类型(如 uint)和类对象。示例如下:

trace(getQualifiedClassName(“abc”));   //输出 String

trace(getQualifiedClassName(1));     //输出 int

trace(getQualifiedClassName(int));     //输出 int
trace(getQualifiedClassName(Sprite)); //输出 flash.display::Sprite
trace(getQualifiedClassName(自定义的类));//输出 带包路径的自定义类,类似上句输出,如果是在根包,或fla的库里定义的类,则因为在根路径则直接输出自定义类名,类似ActionScript的原始类型
trace(getQualifiedClassName(对象实例名));//参数可以是任何实例名,包括自定义类的实例,输出同上
trace(getQualifiedClassName(方法或函数名));//输出类似Function-20,builtin.as$0::MethodClosure

根据类名获得类:

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]

 

原创粉丝点击