我不想使用硬编码的 switch 语句,将类的字符串名称传递给它,然后实例化适当的类,我想将类的实际名称传递给我的工厂方法并让它动态创建一个实例那个班的。我认为这将是微不足道的,并且很惊讶它不起作用。我一定错过了一些非常基本的东西:
示例代码:
createProduct(50, "Product1Class");
createProduct(5, "Product2Class");
private function createProduct(amount:uint, productClassName:String):void {
var productReference:Class;
try {
productReference = getDefinitionByName(productClassName) as Class;
for (var i:uint = 0; i < amount; i++) {
var product = new productReference() as ProductBaseClass; // throws reference error!
}
} catch (error:ReferenceError) {
throw new ReferenceError(error.message + " Have you linked a library item to this class?");
}
}
唯一可能有点奇怪(不确定)的是这些“产品”实际上是链接库项目(即:我在库中有一个与 Product1Class 的链接和另一个与 Product2Class 的链接的movieClip,它们都扩展了 ProductBaseClass,这反过来又扩展了 MovieClip。
为什么引用错误?