Создание экземпляра класса из строки в ActionScript 3
У меня есть строка, которая во время выполнения содержит имя класса, который я хочу создать. Как бы я это сделал?
Я читаю предложения по использованию flash.utils.getDefinitionByName()
:
var myClass:Class = getDefinitionByName("package.className") as Class;
var myInstance:* = new myClass();
Тем не менее, это дает мне следующую ошибку:
Исключение [Fault], информация =ReferenceError: Ошибка #1065: переменная className не определена.
2 ответа
Самый простой метод, который я придумал, - это просто записать имена классов, разделенные точкой с запятой, в любом месте вашего проекта.
Например, я создаю файл Assets.as со следующим:
package {
public class Assets {
// To avoid errors from the compiler when calling getDefinitionByName
// just list all of the classes that are not otherwise referenced in code:
Balloon;
Cloud;
FlyingHorse;
FlyingPig;
UFO;
Zeppelin;
}
}
Полный пример кода / учебник по этому вопросу находится здесь: http://producerism.com/blog/flashpunk-dame-and-lua-tutorial-part-6/
Другой вариант - использовать аргумент компилятора mxmlc -include, например так:
-includes=com.mydomain.package.MyClass
http://blogs.adobe.com/cantrell/archives/2010/09/loading-classes-dynamically-in-actionscript-3.html