Просмотр полной версии : безопасное обращение к свойству объекта через QName.
incvizitor
12.11.2013, 12:35
Вообщем есть код:
public class Main extends Sprite{
test const foo:String = "fooConst";
public function Main() {
var qName : QName = new QName(test, "foo");
trace(this.hasOwnProperty(qName.toString()));
trace(qName in this);
}
}
Оба трейса вернут false.
Естественно можно через this[qName], но это черевато RTE в случае, если свойства не существует. Возможно ли разрулить эту ситуацию без try/catch ?
Оба трейса вернут false.
У вас qName локальная переменная, откуда ей взяться в this?
Добавлено через 44 секунды
P.S. qName.toString() (http://help.adobe.com/ru_RU/FlashPlatform/reference/actionscript/3/QName.html#toString()).
incvizitor
12.11.2013, 14:08
откуда ей взяться в this?
Ну this[qName] работает, если что. Но в случае если localName будет не "foo", а "foo1" - будет RTE.
С помощью describeType можно узнать список полей и посмотреть, есть ли там это.
incvizitor
12.11.2013, 16:49
ChuwY, что то подсказывает, что с describeType будет даже медленнее, чем обращения через try/catch.
Если его каждый раз вызывать заново, то да.
Если кешировать результаты различные, то, думаю, все же куда быстрее.
Еще можно посмотреть библиотеку по поводу рефлексии в as3commons.
Там, наверняка, по-умному все сделано.
incvizitor
13.11.2013, 02:25
таких библиотек много, но суть не в этом. Мне кажется, что должен быть способ без describeType. Надо ведь просто узнать есть такое свойство или его нету...
Надо ведь просто узнать есть такое свойство или его нету...
hasOwnProperty(propName) по идее хватит
Из-за кастомного неймспейса не работает.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.