Flex cookbook entry: How to create class instance with argument list.
Недавно видел на одном блоге запись на эту тему и решил поделится своим решением. Запостил в комментариях, но автор блога не смог подтвердить(премодерация) мои комментарии сославшись на неисправность в движке сайта. Теперь у меня есть сободное место для размещения всех велосипедов. Класс aw.utils.ClassUtils.as. Описание методов можно найти в ASDoc комментариях этого класса. Примеры: Создание экземпляра класса по ссылке на объект класса.
import aw.utils.*; import flash.display.*; var cls:Class = BitmapData; var bmp:BitmapData = ClassUtils.call(cls, 5, 5, false, 0xff0000) as BitmapData; this.addChild(ClassUtils.apply(Bitmap, [bmp, PixelSnapping.AUTO, false]) as DisplayObject);
Два способа создания экземпляра класса по его имени.
import flash.display.*; import aw.utils.ClassUtils; var className:String = 'flash.display.BitmapData'; var bmp1:Bitmap = new Bitmap( ClassUtils.callByName(className, 100, 100, false, 0xff0000) ); var args2:Array = [100, 100, false, 0x00ff00]; var bmp2:Bitmap = new Bitmap( ClassUtils.applyByName(className, args2) ); bmp2.y = 100; this.addChild(bmp1); this.addChild(bmp2);
Метки: ClassUtils, constructor, definition
Действительно велосипед.
А в чем смысл класса ClassUtils ?
Мне проще написать:
var className:Object = getDefinitionByName(«Array»);
var myArray:* = new className();
myArray.push(1,2,3,4)
trace(myArray,myArray.length);
Вообще, проще написать:
var arr:Array = [0,1,2,3,4];
А для объекта:
var obj:Object = {a:0, b:1, c:2};
соответственно.
Просто класс используется для доставания эклемпляров классов по именам. И удобство заключается в том, что можно используя один метод создать экземляр с любым кол-вом параметров в конструкторе вместо обычного:
import flash.system.*;
car cls:Class;
var appd:ApplicationDomain = ApplicationDomain.currentDomain;
if(appd.hasDefinition(CLASS_NAME)){
cls = appd.getdefinition(CLASS_NAME);
}else throw new Error(‘…’);
var obj = new cls(param1, param2, param3, …paramN);
Я какое то время часто использовал подобный код, поэтому решил написать такое универсальное решение на все случаи жизни.
Да, это действительно жоский велосипед.
[...] блог Велосипеды ручной сборки. « Создание двух/трёх членов класса с одним именем Дополнительные возможности фильтрации с помощью E4X [...]
[...] Я опробовал разные методы подстановки, но ничего не получилось. Но нашёл другой путь и тут же расширил класс aw.utils.ClassUtils(упоминался ранее). [...]