|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
как имея ссылку на функцию узнать экземпляр класса в котором эта функция вызовется?
Добрый день!
хочется узнать возможно ли такое: допустим я передаю в какой-то метод ссылку, как при подписке на событие. Можно ли как нибудь получить ссылку на экземпляр класса из этой функции, или такое в принципе не возможно? |
|
|||||
Мне приходит в голову только один вариант пока:
вызвать ошибку, поймать, распарсить. Ошибку вызываем, передавая в apply массив параметров длиной на 1 больше, чем в свойстве length этого метода.
__________________
9 из 10 голосов в моей голове сказали наркотикам "НЕТ" Мои ачивки: художник-паразит. Последний раз редактировалось ChuwY; 10.04.2012 в 17:58. |
|
|||||
нельзя.
Просто передавайте сам объект, а у него уже вызывайте функцию. Если очень надо конечно |
|
|||||
на ум пришло Ссылка на инициализатор метода, но что-то мне подсказывает, что это не то.
__________________
местонахождение |
|
|||||
конкретного экземпляра при этом только не узнаешь. Да и ссылку не получишь.
Честно говоря, вопрос который задал топик-стартер, говорит от том, что стоит пересмотреть "архитектуру" |
|
|||||
тут не о архитектуре вопрос, он скорее теоретический... мысли возникали, вот и решил спросить возможно ли такое...
|
|
|||||
идеологически нельзя знать кто вызвал у тебя метод. Смысл в том что поведение данного метода не должно зависеть от того кто его вызвал. Если объекту сказали ехать, то он должен ехать вне зависимости от того кто ему такое сказал.
__________________
:) |
|
|||||
Ну как-то так:
private function getClassByMethod(method : Function):Class{ var message : String; var strarr : Array; var methodname : String; var className : String; // получаем сообщение try{ method.apply(null, new Array(method.length+1)); } catch(error : ArgumentError){ message = error.message; } // отрезаем лишнюю часть после метода strarr = message.split("("); message = strarr[0]; // отрезаем лишнюю часть до метода strarr = message.split(" "); methodname = strarr[strarr.length-1]; className = methodname.split("/")[0]; return getDefinitionByName(className) as Class; }
__________________
9 из 10 голосов в моей голове сказали наркотикам "НЕТ" Мои ачивки: художник-паразит. Последний раз редактировалось ChuwY; 10.04.2012 в 18:32. |
|
|||||
2Aquahawk: это ответ скорее на вопрос из соседней ветки
я же спрашиваю как узнать обладателя функции, а не того кто вызывает эту функцию. тоесть: class A{ public function setCallBack(func:Function):void{ // тут надо узнать кому принадлежит func } } 2ChuwY: спасибо, я понял что ты предложил в первый раз... интересный вариант, но он дает нам понимание того какому КЛАССУ принадлежит эта функция, а не ссылку на ЭКЗЕМПЛЯР КЛАССА которому принадлежит присланная функция. а по архитектуре зачем моглобы такое пригодиться(к сожалению, получается что не прокатит), можно было бы сделать обертку эвент диспетчеру, который подписчиков заносил бы в массив, а потом вызвав метод и передав в него себя, можно было бы отписаться сразу от всего к чему подписан. Понимаю что можно по разному этот вопрос решить... |
|
|||||
В дебаг версии и в доверенном окружении можно получить через getSavedThis.
__________________
משיח לא בא משיח גם לא מטלפן |
Часовой пояс GMT +4, время: 06:53. |
|
« Предыдущая тема | Следующая тема » |
|
|