Создание класса по его имени
Февраль 27th, 2010 автор: Oleg Antipov
Вот чем мне нравится actionscript 3, так это его гибкостью. Например недавно узнал что в нём можно создать класс, имея на руках только его имя в строке. Для этого надо использовать функцию getDefinitionByName, которая возратит ссылку на нужный нам класс.
Пример:
import flash.utils.*; //не забываем подключить нужную библиотеку var ClassRef:Class = getDefinitionByName("int") as Class; //Создаём нужный нам класс var num = new ClassRef (123);//Создаём экземпляр нашего класса trace(num); //Убеждаемся что получили int :)
Эта фича может нам также пригодится например для динамического создания классов наших звуков:
var ClassRef:Class = getDefinitionByName("mySound") as Class; //Создаём нужный нам класс звука var snd:Sound = (new ClassRef() as Sound);//Создаём экземпляр нашего звука snd.play(0); //Проверяем тот ли звук мы создали, какой хотели )
Вообщем думаю эта фича очень полезна и может пригодится в различных местах флеш игры

Март 2nd, 2010 at 16:15
Очень нужная вещь, многие думаю мучаются над этой проблемой, особенно в начале изучения AS3..
Апрель 24th, 2010 at 15:37
Не совсем пойму смысл данной конструкции:
var ClassRef:Class = getDefinitionByName(”Sprite”) as Class; // ClassRef указатель на класс (тип данных) Sprite
var sp = new ClassRef () as Sprite; // создаем экземпляр класса Sprite
Если почти тоже самое можно сделать с пом. сл кода:
var sp:Sprite; // указатель типа Sprite
sp = new Sprite(); // создаем экземпляр класса Sprite
Поясни, пожалуйста смысловую разницу.
Т.е. зачем нам создавать ссылку на клаас а потом с помощью нее создавать экземпляр…
Апрель 24th, 2010 at 22:12
Самый простой пример – есть три класса – robot, zombie, solder, которые наследуются от базового класса enemyObject. Чтобы создавать эти объекты на экране можно составить следующую функцию:
function createObject(type:String)
{
var ClassRef:Class = getDefinitionByName(type) as Class;
var cObj:enemyObject = (new ClassRef() as enemyObject);
allobjects.push(cObj);
addChild(cObj);
}
Ну а дальше можем использовать эту функцию для создания разных врагов
createObject(”robot”);
createObject(”zombie”);
createObject(”solder”);
Если же писать как ты предлагаешь, то придётся проверять тип и на его основе создавать класс:
var cObj:enemyObject;
if(type==”robot”) cObj=new robot(); else
if(type==”zombie”) cObj=new zombie(); else
if(type==”solder”) cObj=new solder();
Апрель 24th, 2010 at 22:57
Спасибо за наглядный пример, да действительно функция полезная, особенно при многочисленной градации объектов, наследующих базовый класс.
Хороший блог.
Май 27th, 2010 at 16:05
как раз мне помогло – делал годовой отчет для одной конторы. 800 страниц, каждая – в виде слайда с заданным именем класса вида slide_rus_214 или slide_eng_331
так просто по номеру обращаюсь )