Форум 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=157240)

ObOs 02.06.2011 15:31

Создание произвольного количества экземпляров класса
 
Добрый день!
Допустим у меня есть класс MyClass и класс MnogoKlassov. Как мне в классе myClass создать произвольное количество экземпляров класса MnogoKlassov. Количество классов и их имена буду подгружать через php из базы данных, каждый раз количество и имена могут меняться.

Допустим, я загрузил ответ от php, получил массив с именами классов, пусть будет namesArray.
Пишу:

Код AS3:

package имяПакета{
 
          import flash.display.MovieClip;
 
 
public class MyClass extends MovieClip{
 
 
 function MyClass()
          {
for(var i:int=0;i<namesArray.length;i++)
                      {
this[namesArray[i]]=new MnogoKlassov();
 
}//for
 
}
 
 
}
}

Но, как и следовало ожидать возникает ошибка "Не удается создать свойство имяКласса в имяПакета.MyClass." т.к. в описании класса MyClass отсутствуют определения этих классов.
Подскажите, пожалуйста, как решить данную проблему.


P.S. Прошу прощения за может быть где-то не правильную терминологию, начал переходить на AS3 три недели назад.

arkadattx 02.06.2011 15:45

Вы путаете "имя класса" и "имя переменной". Если вы хотите динамически создавать переменные с указанными именами, то ИМХО у вас не правильно организована структура приложения.
А вообще почитайте про динамические (dynamic) классы.

bav 02.06.2011 15:47

dynamic

ObOs 02.06.2011 16:13

Большое спасибо за быстрые ответ. Заработало. Догадывался что нужно делать класс динамическим, но,
скажу вам по секрету, пусть это и смешно, я писал "dinamic" вместо "dynamic" и не понимал почему не подсвечивается средой разработки))
Мне просто надо было внимательнее читать книгу Мука.

Aquahawk 02.06.2011 16:26

не используйте dynamic, это очень плохо с точки зрения ООП и последующей поддержки. Объявите массив и сожите объекты туда. А на себя сделайте addchild. Лежать(грфически) они будут на вашем объекте а ссылки на них будуте хранить в массиве и управлять ими оттуда.

DaFive 02.06.2011 16:29

Цитата:

Сообщение от Aquahawk (Сообщение 1000716)
не используйте dynamic, это очень плохо с точки зрения ООП и последующей поддержки

Чем же?

-De- 02.06.2011 16:38

Тем же, чем и нетипизированные переменные (по сути они и создаются). Ну и на ровном месте +размер и, возможно, тормоза у класса.
Тут возможно поможет ассоциативный массив (ака Object для AS3). Или даже просто массива хватит.

Aquahawk 02.06.2011 16:38

Тем что код не является самодокументированным и множество проверок типов которые можно делать при компиляции уходят в рантайм. Это катастрофически медленно в исполнении, и очень тяжело дебажить.

Добавлено через 5 минут
я пишу очень большие и сложные проекты на AS3 и ещё ни в одном у меня не было даже мысли сделать dynamic или объявить нетипизированный object или *. Это наследие ECMAscript и я его не люблю. Я люблю строгую типизацию. Может потому что первым языком на котором я начал писать что-то существенное был C++

ObOs 02.06.2011 16:49

Aquahawk, вот так? Я вас правильно понял?

Код AS3:

package имяПакета{
 
          import flash.display.MovieClip;
 
 
public class MyClass extends MovieClip{
 
 var classNames_ar:Array;
 
 
 function MyClass()
          {
for(var i:int=0;i<namesArray.length;i++)
 {
classNames_ar[i]=new MnogoKlassov();
 
addChild(classNames_ar[i]);
 
}//for
 
}
 
 
}
}

Если не трудно, объясните чем плохо использование dynamic с точки зрения ООП.

Aquahawk 02.06.2011 16:55

да именно так

Добавлено через 1 минуту
используйте форматирование, пожалуйста.

ObOs 02.06.2011 17:00

Цитата:

Сообщение от Aquahawk (Сообщение 1000729)
да именно так

Добавлено через 1 минуту
используйте форматирование, пожалуйста.

Хорошо. Спасибо за ответы.


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

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