Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 14.02.2013, 20:59
o_oxana вне форума Посмотреть профиль Отправить личное сообщение для o_oxana Найти все сообщения от o_oxana
  № 1  
Ответить с цитированием
o_oxana

Регистрация: Oct 2010
Сообщений: 36
По умолчанию Вызов конструктора класса над массивом параметров.

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

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

получаю ссылку на класс:
Код AS1/AS2:
var ClassReference:Class = getDefinitionByName(className) as Class;
а дальше что? как получить
Код AS1/AS2:
new ClassReferense()
над массивом аргументов?

спасибо.

Старый 14.02.2013, 21:03
Asfel вне форума Посмотреть профиль Отправить личное сообщение для Asfel Найти все сообщения от Asfel
  № 2  
Ответить с цитированием
Asfel

Регистрация: Feb 2013
Адрес: Киев
Сообщений: 76
Отправить сообщение для Asfel с помощью Skype™
http://www.flasher.ru/forum/showthread.php?t=194299 похоже никак просто так... . Хотя там приемлемое решение на самом деле в ссылке предложеной в теме.

Старый 14.02.2013, 23:15
KumoKairo вне форума Посмотреть профиль Отправить личное сообщение для KumoKairo Найти все сообщения от KumoKairo
  № 3  
Ответить с цитированием
KumoKairo
 
Аватар для KumoKairo

Регистрация: Jan 2013
Сообщений: 550
Записей в блоге: 1
создать новую переменную, как обычно
Код AS3:
var myNewObject: ClassReference = new ClassReference();
При этом часто возникает ошибка на стадии компиляции, говорит, что не могу найти никакого className
Она решается простой принудительной компиляцией класса перед вызовом getDefinitionByName
А массив, как я понял, передается отдельно? Если так, то ничего не мешает впихнуть его в конструктор:
Код AS3:
var myNewObject: ClassReference = new ClassReference(argArray);

Старый 14.02.2013, 23:32
Asfel вне форума Посмотреть профиль Отправить личное сообщение для Asfel Найти все сообщения от Asfel
  № 4  
Ответить с цитированием
Asfel

Регистрация: Feb 2013
Адрес: Киев
Сообщений: 76
Отправить сообщение для Asfel с помощью Skype™
Цитата:
При этом часто возникает ошибка на стадии компиляции, говорит, что не могу найти никакого className
Она решается простой принудительной компиляцией класса перед вызовом getDefinitionByName
Она решается ссылкой на класс в коде иначе он просто не будет вкомпилен в проект....

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

Старый 14.02.2013, 23:36
KumoKairo вне форума Посмотреть профиль Отправить личное сообщение для KumoKairo Найти все сообщения от KumoKairo
  № 5  
Ответить с цитированием
KumoKairo
 
Аватар для KumoKairo

Регистрация: Jan 2013
Сообщений: 550
Записей в блоге: 1
Ну я же написал про принудительную компиляцию перед вызовом дефинишна)

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

Старый 15.02.2013, 00:05
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 6  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
KumoKairo, очевидно подразумевается, что конструктор принимает не массив, а несколько (число неизвестно и у разных классов может быть разным) параметров. А у стороны, вызывающей конструктор, есть имя класса и массив параметров. То есть вызывать надо как бы так:
Код AS3:
var myNewObject:Object = new ClassReference(argArray[0], argArray[1], argArray[2]);
__________________
Reality.getBounds(this);

Старый 15.02.2013, 00:10
KumoKairo вне форума Посмотреть профиль Отправить личное сообщение для KumoKairo Найти все сообщения от KumoKairo
  № 7  
Ответить с цитированием
KumoKairo
 
Аватар для KumoKairo

Регистрация: Jan 2013
Сообщений: 550
Записей в блоге: 1
Тогда не совсем понятно, зачем каждый элемент массива отдельно указывать в конструкторе через запятую, когда в самом классе можно проверить на количество аргументов или null..

Старый 15.02.2013, 00:30
Nooob вне форума Посмотреть профиль Отправить личное сообщение для Nooob Найти все сообщения от Nooob
  № 8  
Ответить с цитированием
Nooob
 
Аватар для Nooob

Регистрация: Mar 2007
Сообщений: 319
зачем такие извращения. всего то нужно вынести инициализацию из конструктора в метод и дёргать его
Код AS3:
instance.initialize.apply(this, argArray);

Старый 15.02.2013, 01:41
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 9  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
На секунду представьте, что автор не может переписать готовые классы.
Например, это примитивы 3D-движка, классы чужой библиотеки, или компоненты GUI.
__________________
Reality.getBounds(this);

Старый 15.02.2013, 14:32
o_oxana вне форума Посмотреть профиль Отправить личное сообщение для o_oxana Найти все сообщения от o_oxana
  № 10  
Ответить с цитированием
o_oxana

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

Создать новую тему Ответ Часовой пояс GMT +4, время: 13:26.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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