从字符串中实例化类

4

我能否使用字符串"ClassA"来实例化我的应用程序中的真正ClassA类?

4个回答

4
您可以在flash.utils包中使用getDefinitionByName方法。
var ClassReference:Class = getDefinitionByName("ClassA") as Class;

您需要完整的名称路径,例如说 mypackage.stuff.ClassA,调用方式如下:
var ClassReference:Class = getDefinitionByName("mypackage.stuff.ClassA") as Class;
var instance:Object = new ClassReference();

然后使用instance来执行你的方法。
instance.methodname();

记住,如果你想将它添加到显示列表中,你需要将它转换为DisplayObject

addChild(DisplayObject(instance));

4

看一下flash.utils.getDefinitionByName方法。你应该可以使用它来从类名字符串中获取一个类对象。


1
请注意,这必须是一个完全限定的名称,因此如果您的类定义在com.namespace.subspace.MyClass中,则应该有var MyClass:Class = getDefinitionByName("com.namespace.subspace::MyClass") as Class; var myObj = new MyClass(); - Ender
@Ponty - 是的,它应该适用于任何类 - 就像 @Ender 提到的那样,它必须使用适当的包进行完全限定。 - Matthew J Morrison
我在库中有一个PNG图像,我已经通过属性声明它为Background类,该类扩展了BitmapData。当我输入:var BMDClass:Class = getDefinitionByName("Background") as Class;时,我得到了:变量Background未定义的错误提示! - Ponty

0

现在我可以通过字符串实例化图像库,这是我的代码!

import flash.display.Bitmap;
import flash.display.BitmapData;
var ClassReference:Class = getDefinitionByName("my0002") as Class;
var instance:BitmapData = new ClassReference();
var myb:Bitmap =new Bitmap (instance)
this.addChild (myb)

0

你可以使用

Eval("new "+myString+"()");

或者甚至可能

new Eval(myString)();

但我不确定Actionscript是否支持第二个。


是的,AS3中已经移除了eval函数。 - Ender

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接