Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   безопасное обращение к свойству объекта через QName. (http://www.flasher.ru/forum/showthread.php?t=204836)

incvizitor 12.11.2013 12:35

безопасное обращение к свойству объекта через QName.
 
Вообщем есть код:

Код AS3:

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 ?

alatar 12.11.2013 13:56

Цитата:

Оба трейса вернут false.
У вас qName локальная переменная, откуда ей взяться в this?

Добавлено через 44 секунды
P.S. qName.toString().

incvizitor 12.11.2013 14:08

Цитата:

откуда ей взяться в this?
Ну this[qName] работает, если что. Но в случае если localName будет не "foo", а "foo1" - будет RTE.

ChuwY 12.11.2013 16:38

С помощью describeType можно узнать список полей и посмотреть, есть ли там это.

incvizitor 12.11.2013 16:49

ChuwY, что то подсказывает, что с describeType будет даже медленнее, чем обращения через try/catch.

ChuwY 12.11.2013 17:43

Если его каждый раз вызывать заново, то да.
Если кешировать результаты различные, то, думаю, все же куда быстрее.
Еще можно посмотреть библиотеку по поводу рефлексии в as3commons.
Там, наверняка, по-умному все сделано.

incvizitor 13.11.2013 02:25

таких библиотек много, но суть не в этом. Мне кажется, что должен быть способ без describeType. Надо ведь просто узнать есть такое свойство или его нету...

GBee 13.11.2013 02:37

Цитата:

Надо ведь просто узнать есть такое свойство или его нету...
hasOwnProperty(propName) по идее хватит

ChuwY 13.11.2013 13:39

Из-за кастомного неймспейса не работает.


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

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