|
|
|||||
Регистрация: May 2012
Сообщений: 10
|
Проверка существования класса
Много уже нарыл здесь...
Только не получаеса! Значитса классы для звуков я определяю так: [Embed(source = "../../lib/Source/Battle/sound/1/1.mp3")] private var Bs_1_1_cls : Class; [Embed(source = "../../lib/Source/Battle/sound/1/2.mp3")] private var Bs_1_2_cls : Class; ... [Embed(source = "../../lib/Source/Battle/sound/2/1.mp3")] private var Bs_2_1_cls : Class; [Embed(source = "../../lib/Source/Battle/sound/2/2.mp3")] private var Bs_2_2_cls : Class; .. [Embed(source = "../../lib/Source/Battle/sound/n/1.mp3")] private var Bs_n_1_cls : Class; [Embed(source = "../../lib/Source/Battle/sound/n/2.mp3")] private var Bs_n_2_cls : Class; ...[Embed(source = "../../lib/Source/Battle/sound/n/m-1.mp3")] private var Bs_n_m-1_cls : Class; [Embed(source = "../../lib/Source/Battle/sound/n/m.mp3")] private var Bs_n_m_cls : Class; Определяю массив Далее в коде хочу сослатся на эти классы и получить объекты в массиве! var RabArrSound : Array; for (i= 1; i <= n ; i++) { if (this["Bs_" + String(i) + "_1_cls"]) { RabArrSound = new Array(); SoundObj[i] = RabArrSound; }else{ break; } for (var j:int = 1; j <= m ; j++) { if (this["Bs_" + String(i) + "_" + String(j) + "_cls"]) { SoundObj[i][j] = new this["Bs_" + String(i) + "_" + String(j) + "_cls"](); } } } - m - для различных i могут быть разные; поэтому берется максимальное значение! - (т.е. нужна проверка на существование классов(что и видно в коде)) - кроме того некоторые i - в классах могут отсутствовать (смотреть предвдущий пункт) Выдает ошибку при обращении к несуществующему классу if (this["Bs_" + String(i) + "_1_cls"]) { ... if (this["Bs_" + String(i) + "_" + String(j) + "_cls"]) { ... Пробовал: ApplicationDomain.currentDomain.hasDefinition Как здесь советовали: http://www.flasher.ru/forum/showthre...=111716&page=2 Но на все запросы: ApplicationDomain.currentDomain.hasDefinition("Bs_" + String(i) + "_" + String(j) + "_cls") try catch использовать не хочу... Подскажите что в этом случае можно сделать... |
|
|||||
Регистрация: Nov 2010
Сообщений: 497
|
У вас не проверка существования класса. У вас проверка наличия поля. Сам класс имеет другое имя (потрейсите ваш Bs_1_1_cls). Может, Object.hasOwnProperty(String) поможет?
|
|
|||||
Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
|
замените на
должно помочь
__________________
Загружаем картинки, минуя ошибки безопасности |
|
|||||
Регистрация: May 2012
Сообщений: 10
|
maxkar
false на все объекты в качестве Object - this i.o. тоже false на все объекты! при этом если оставить n=6 m=3 все объекты от 1 до 6 задаются по 3 кроме последнего 6-го т.е. объекта SoundObj[6][3] - не существует то при компиляции доходит до этого объекта и если посмотреть массив SoundObj он заполнен т.е. объекты ЕСТЬ Последний раз редактировалось V01D; 23.05.2012 в 16:52. Причина: ошибка в параметрах (m поменялся местами с n) |
|
|||||
Цитата:
Наличие классов вряд ли удастся посмотреть - они там с постфиксами по настроению компилятора генерируются при таком эмбединге. Если нужно просто пройтись по списку, то я бы так сделал: 1. Поменять все поля на публичные 2. Получить xml-ку через describeType(this) 3. Прочитать все названия полей из этой xml-ки и вызвать их через this[fieldName] Ну, или просто, как вы делали, но с публичными полями и проверкой hasOwnProperty |
|
|||||
Регистрация: May 2012
Сообщений: 10
|
Ура СПАСИБО...
И это Object.hasOwnProperty(String) И это ("Bs_" + String(i) + "_1_cls") in this при паблик работает! Хотелось бы (для общего развития) знать в чем отличие!... И почему как привейт не видит? Еще раз СПАСИБО |
Часовой пояс GMT +4, время: 03:21. |
|
« Предыдущая тема | Следующая тема » |
Опции темы | |
Опции просмотра | |
|
|