![]() |
Имя класса из объекта
Я изучаю большой проект на флеш.
Есть функция: class MyClass { .... function update(infoObj) { .... } } Можно ли в теле функции узнать к какому классу принадлежит infoObj? Я написал огромную процедуру, в которой проверяется на соответствие всем классам в проекте (около 150 проверок), но меня это не устраивает. Может есть какой-нибудь метод проверки, кроме instanceof? Потом, я вижу (через trace), что значения полей infoObj меняются не в самой процедуре, а за ее пределами. Хм....в проекте около 100 классов и половина из них содержат переменную-объект infoObj. Нельзя ли проследить, где происходит инициализация этого объекта? Поиск использовал. |
1. Нельзя. Единственный выход, это в каждом классе создать статичное поле, где указывать имя класса.
2. Не понял сути вопроса. |
Я обычно в таких случаях пишу в классах что-то типа:
Очень помогает при трейсе и т.п. Код:
class ClassA { |
Все это классно, но пока AS не то чтобы до С++, а даже до дельфийской VCL очень далеко.
И скрытых никаких полей нет? В Делфи, например, есть стек вызовов. И видно откуда (по иерархии эта процедура вызывалась. Ничего подобного в AS нет? |
2 wvxvw, toString для этого использовать не гуд.
2 wizzard555, есть, если использовать mtasc, он может узнать имя класса, метод и номер строки от куда был вызван trace |
Ну, собственно... если это делать в своих классах, и делать это сознательно - ничего страшного быть не должно. Ну, за исключением всех наследуемых от MovieClip - там в трейс попадает не toString, а _name. Ну и еще не стоит это делать со всякими наследуемыми от, например, XMLNode классами - там где toString() нужен в первозданном виде.
С другой стороны, можно перебирать все переменные в _global (чем по-сути являются классы) и пытаться выяснить является ли объект вызвавший проверку инстансом одной из этих переменных-классов. Проблема в том, что если классов много и уровень вложенности тоже большой, то прийдется сделать кучу операций - вобщем, не рационально. Код:
class myClass {Код:
import flash.geom.Matrix; |
Цитата:
|
wvxvw, ты меня начинаешь пугать своими постоянными хаками и спорными решениями. Если тебе так нравится, ладно. Но не учи этому других.
Достаточно сделать Код:
class net.world.MyClass {А у toString совсем другие задачи. |
Ну, прям-таки хак... Вобщем, не знаю, думаю, что если человек разберется с кодом, то сможет уж сам решить, хочется ему его использовать или нет. Я же не заставляю делать именно так.
А toString() часто вообще не выполняет никаких функций... В классах ММ довольно часто встречается ситуация, когда его именно для этого используют. |
| Часовой пояс GMT +4, время: 14:21. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.