![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Feb 2008
Сообщений: 890
|
Если мы вызываем ф-ию с неизвестным до периода выполнения количеством аргументов, мы используем метод apply экземпляра класса Function, в который передаем массив аргументов.
Как по этой аналогии создать объект, передавая в конструктор массив аргументов (вместо использования стандартного new SomeClass(argOne, argTwo...))? Без использования switch-конструкций в зависимости от длины массива аргументов, естественно.
__________________
скриптограф Последний раз редактировалось orcpochta; 07.04.2011 в 22:22. |
|
|||||
|
Регистрация: Aug 2010
Сообщений: 86
|
Погодите, зачем это все, я так понял вам нужно создать метод-конструктор, принимающий произвольное количество аргументов?
так используйте оператор "...": |
|
|||||
|
Регистрация: Feb 2008
Сообщений: 890
|
Чтобы было понятней:
Во время выполнения необходимо создать объект какого-то неизвестного (до момента необходимости создания) класса. Для создания объекта необходимы класс этого объекта и список аргументов, передаваемых в конструктор. Это может выглядеть примерно так: Хотелось бы избавиться от этой монстрообразной switch-конструкции, в которой для надежности придется прописать штук 10-20 таких кейсов, и сделать все элегантно по аналогии с методом apply.
__________________
скриптограф Последний раз редактировалось orcpochta; 07.04.2011 в 16:42. |
|
|||||
|
[+3 18.04.11]
Регистрация: Dec 2010
Сообщений: 342
|
Не понимаю вашу сложность. Пишите:
А в аргументе пиши столько переменных, сколько надо. В классах изначально присвой параметры по умолчанию, например null NaN. И будет тебе счастье. |
|
|||||
|
Регистрация: Feb 2008
Сообщений: 890
|
Вам не надо понимать всю сложность - есть конкретный вопрос, на который хочется получить конкретный ответ, без всяких "зачем" и "кому это надо", иначе мне пришлось бы раскрыть довольно объемную тему про пулы неоднократно используемых объектов и менеджер таких пулов. Вопрос раскрыт довольно ясно (как мне кажется) и в додумках не нуждается)))
__________________
скриптограф |
|
|||||
|
Регистрация: Mar 2011
Сообщений: 38
|
Можно передавать не массив параметров, а объект с параметрами.
А в конструкторе каждого класса делать выборку нужных данных из объекта. public function getInstance(classRef:Class, arg:Object):Object { return new classRef(arg); } |
|
|||||
|
Вроде была похожая тема. Там заводился словарь, и из него по типу события доставался конкретный класс.
Идея в общем: var dict:Object = {}; dict["type0"] = Class0; dict["type1"] = Class1; public function getInstance(classType:String, ...args):Object { var cls:Class = dict[classType] as Class; return new cls(args); } http://www.flasher.ru/forum/showthread.php?t=151489 Вот тема, там еще есть варианты.
__________________
Чтобы доказать, что вы не робот, причините вред другому человеку. |
![]() |
![]() |
Часовой пояс GMT +4, время: 01:02. |
|
|
« Предыдущая тема | Следующая тема » |
|
|