![]() |
как имея ссылку на функцию узнать экземпляр класса в котором эта функция вызовется?
Добрый день!
хочется узнать возможно ли такое: допустим я передаю в какой-то метод ссылку, как при подписке на событие. Можно ли как нибудь получить ссылку на экземпляр класса из этой функции, или такое в принципе не возможно? |
Мне приходит в голову только один вариант пока:
вызвать ошибку, поймать, распарсить. Ошибку вызываем, передавая в apply массив параметров длиной на 1 больше, чем в свойстве length этого метода. |
нельзя.
Просто передавайте сам объект, а у него уже вызывайте функцию. Если очень надо конечно |
на ум пришло Ссылка на инициализатор метода, но что-то мне подсказывает, что это не то.
|
конкретного экземпляра при этом только не узнаешь. Да и ссылку не получишь.
Честно говоря, вопрос который задал топик-стартер, говорит от том, что стоит пересмотреть "архитектуру" |
тут не о архитектуре вопрос, он скорее теоретический... мысли возникали, вот и решил спросить возможно ли такое...
|
идеологически нельзя знать кто вызвал у тебя метод. Смысл в том что поведение данного метода не должно зависеть от того кто его вызвал. Если объекту сказали ехать, то он должен ехать вне зависимости от того кто ему такое сказал.
|
Ну как-то так:
Код AS3:
|
2Aquahawk: это ответ скорее на вопрос из соседней ветки
я же спрашиваю как узнать обладателя функции, а не того кто вызывает эту функцию. тоесть: Код AS3:
2ChuwY: спасибо, я понял что ты предложил в первый раз... интересный вариант, но он дает нам понимание того какому КЛАССУ принадлежит эта функция, а не ссылку на ЭКЗЕМПЛЯР КЛАССА которому принадлежит присланная функция. а по архитектуре зачем моглобы такое пригодиться(к сожалению, получается что не прокатит), можно было бы сделать обертку эвент диспетчеру, который подписчиков заносил бы в массив, а потом вызвав метод и передав в него себя, можно было бы отписаться сразу от всего к чему подписан. Понимаю что можно по разному этот вопрос решить... |
В дебаг версии и в доверенном окружении можно получить через getSavedThis.
|
| Часовой пояс GMT +4, время: 12:19. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.