Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Вызов конструктора класса над массивом параметров. (http://www.flasher.ru/forum/showthread.php?t=194467)

o_oxana 14.02.2013 20:59

Вызов конструктора класса над массивом параметров.
 
стоит задача восстановления приложения с определенной контрольной точки.

на входе имею: className - название класса в виде строки(класс - наследник мувиклипа) и ArgArray - массив аргументов, которые передаются в конструктор этого класса(массив может быть пустой, а может и нет).

получаю ссылку на класс:
Код AS1/AS2:

var ClassReference:Class = getDefinitionByName(className) as Class;

а дальше что? как получить
Код AS1/AS2:

new ClassReferense()

над массивом аргументов?

спасибо.

Asfel 14.02.2013 21:03

http://www.flasher.ru/forum/showthread.php?t=194299 похоже никак просто так... :). Хотя там приемлемое решение на самом деле в ссылке предложеной в теме.

KumoKairo 14.02.2013 23:15

создать новую переменную, как обычно
Код AS3:

var myNewObject: ClassReference = new ClassReference();

При этом часто возникает ошибка на стадии компиляции, говорит, что не могу найти никакого className
Она решается простой принудительной компиляцией класса перед вызовом getDefinitionByName
А массив, как я понял, передается отдельно? Если так, то ничего не мешает впихнуть его в конструктор:
Код AS3:

var myNewObject: ClassReference = new ClassReference(argArray);


Asfel 14.02.2013 23:32

Цитата:

При этом часто возникает ошибка на стадии компиляции, говорит, что не могу найти никакого className
Она решается простой принудительной компиляцией класса перед вызовом getDefinitionByName
Она решается ссылкой на класс в коде иначе он просто не будет вкомпилен в проект....

Код:

А массив, как я понял, передается отдельно? Если так, то ничего не мешает впихнуть его в конструктор:
Ты не верно понял, если бы все так было просто то врядли бы человек бы писал на форум :D

KumoKairo 14.02.2013 23:36

Ну я же написал про принудительную компиляцию перед вызовом дефинишна)

А можно поподробней тогда насчет этого массива, интересно самому

Wolsh 15.02.2013 00:05

KumoKairo, очевидно подразумевается, что конструктор принимает не массив, а несколько (число неизвестно и у разных классов может быть разным) параметров. А у стороны, вызывающей конструктор, есть имя класса и массив параметров. То есть вызывать надо как бы так:
Код AS3:

var myNewObject:Object = new ClassReference(argArray[0], argArray[1], argArray[2]);


KumoKairo 15.02.2013 00:10

Тогда не совсем понятно, зачем каждый элемент массива отдельно указывать в конструкторе через запятую, когда в самом классе можно проверить на количество аргументов или null..

Nooob 15.02.2013 00:30

зачем такие извращения. всего то нужно вынести инициализацию из конструктора в метод и дёргать его
Код AS3:

instance.initialize.apply(this, argArray);


Wolsh 15.02.2013 01:41

На секунду представьте, что автор не может переписать готовые классы.
Например, это примитивы 3D-движка, классы чужой библиотеки, или компоненты GUI.

o_oxana 15.02.2013 14:32

спасибо за участие. возможность переписать имеющиеся классы есть, но очень не хотелось выносить инициализацию в отдельные методы(перелопатить немало придется), но, похоже, другого пути нет.


Часовой пояс GMT +4, время: 23:50.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.