[英]AS3 Dynamically create an instance of an object
我有一个类,它包含以下方法将对象放在舞台上。
public function createBox()
{
var box:Ball1 = new Ball1();
addChild(box);
box.addEventListener(Event.ENTER_FRAME, boxF);
}
我想要做的是将对象名称传递给方法,然后加载该对象,从而允许我对不同的对象使用相同的方法。
一个非工作的例子:
public function createBox( obj )
{
var box:obj = new obj();
addChild(box);
box.addEventListener(Event.ENTER_FRAME, boxF);
}
这可能吗?
谢谢
现有答案的更敏捷版本是使用getDefinitionByName()
,它允许您基于输入字符串构造类。
使用此函数,您可以将方法重写为以下内容:
public function produce(className:String):*
{
var type:Class = getDefinitionByName(className) as Class;
return new type();
}
为了使这更严格和更易于维护(使得只有某些工厂可以创建某些类),您可以使用接口在给定工厂和它可以生成的类之间建立关系。 下面是一个小例子。
说一个工厂, EnemyFactory
,创建你认为是游戏中的敌人的物体。 我们不希望能够创建拾取器,粒子和其他非敌人类型的对象。 我们可以创建一个IEnemyProduct
接口,它由EnemyFactory
允许创建的类实现。 界面可以简单如下:
public interface IEnemyProduct{}
任何敌人的类都可以实施。 然后可以将EnemyFactory
的produce()
函数修改为更易读的版本,如下所示:
public function produce(enemyClassName:String):IEnemyProduct
{
var type:Class = getDefinitionByName(enemyClassName) as Class;
return new type() as IEnemyProduct;
}
在这种情况下,如果生成的类没有实现IEnemyProduct
,则produce()
将返回null
。 这里的目标是明确哪些工厂负责哪些对象,一旦项目变大,这是一个很大的优势。 使用接口而不是基类也意味着您可以实现多个接口并使多个工厂生成类。
你可以使用一个简单的工厂,或类似的东西:
public class Factory
{
public static function produce(obj:String)
{
if (obj == "obj1")
{
return new obj1();
} else if (obj == "obj2") {
return new obj2();
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.