gpt4 book ai didi

actionscript-3 - 我可以只知道 AS3 类的名字就创建该类的实例吗?

转载 作者:行者123 更新时间:2023-12-02 07:31:03 25 4
gpt4 key购买 nike

我可以在知道 AS3 类名称的情况下创建该类的实例吗?我的意思是字符串表示形式,例如 FlagFrance

最佳答案

按名称动态创建类的实例。为此,可以使用以下代码:

 //cc() is called upon creationComplete
private var forCompiler:FlagFrance; //REQUIRED! (but otherwise not used)

private function cc():void
{
var obj:Object = createInstance("flash.display.Sprite");
}

public function createInstance(className:String):Object
{
var myClass:Class = getDefinitionByName(className) as Class;
var instance:Object = new myClass();
return instance;
}

getDefinitionByName 的文档说:

"Returns a reference to the class object of the class specified by the name parameter."

上面的代码我们需要将返回值指定为Class吗?这是因为 getDefinitionByName 还可以返回一个函数(例如 flash.utils.getTimer - 不属于任何类的包级函数)。由于返回类型可以是函数或类,Flex 团队将返回类型指定为对象,并且您需要根据需要执行强制转换。

上面的代码非常模仿文档中给出的示例,但在某种程度上它是一个糟糕的示例,因为 flash.display.Sprite 一切都会正常工作,但尝试做同样的事情使用自定义类,您可能最终会遇到以下错误:

ReferenceError: Error #1065: Variable [name of your class] is not defined.

错误的原因是您必须在代码中引用您的类 - 例如您需要创建一个变量并指定它的类型,如下所示:

private var forCompiler:SomeClass;

如果不这样做,您的类将不会在编译时编译到 .swf 中。编译器仅包含实际使用的类(而不仅仅是导入的类)。这样做是为了优化 .swf 的大小。因此,声明变量的需要实际上不应被视为疏忽或错误,尽管声明不直接使用的变量确实让人感觉很黑客。

关于actionscript-3 - 我可以只知道 AS3 类的名字就创建该类的实例吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7597343/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com