Вместо того, чтобы использовать жестко запрограммированный оператор 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, оба из которых расширение ProductBaseClass, которое, в свою очередь, расширяет MovieClip.
Почему ReferenceError?