Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   как имея ссылку на функцию узнать экземпляр класса в котором эта функция вызовется? (http://www.flasher.ru/forum/showthread.php?t=177876)

dsQuadro 10.04.2012 17:46

как имея ссылку на функцию узнать экземпляр класса в котором эта функция вызовется?
 
Добрый день!
хочется узнать возможно ли такое: допустим я передаю в какой-то метод ссылку, как при подписке на событие. Можно ли как нибудь получить ссылку на экземпляр класса из этой функции, или такое в принципе не возможно?

ChuwY 10.04.2012 17:54

Мне приходит в голову только один вариант пока:
вызвать ошибку, поймать, распарсить.
Ошибку вызываем, передавая в apply массив параметров длиной на 1 больше, чем в свойстве length этого метода.

ramshteks 10.04.2012 17:54

нельзя.
Просто передавайте сам объект, а у него уже вызывайте функцию. Если очень надо конечно

СлаваRa 10.04.2012 18:00

на ум пришло Ссылка на инициализатор метода, но что-то мне подсказывает, что это не то.

ramshteks 10.04.2012 18:01

конкретного экземпляра при этом только не узнаешь. Да и ссылку не получишь.

Честно говоря, вопрос который задал топик-стартер, говорит от том, что стоит пересмотреть "архитектуру"

dsQuadro 10.04.2012 18:08

тут не о архитектуре вопрос, он скорее теоретический... мысли возникали, вот и решил спросить возможно ли такое...

Aquahawk 10.04.2012 18:13

идеологически нельзя знать кто вызвал у тебя метод. Смысл в том что поведение данного метода не должно зависеть от того кто его вызвал. Если объекту сказали ехать, то он должен ехать вне зависимости от того кто ему такое сказал.

ChuwY 10.04.2012 18:17

Ну как-то так:

Код AS3:

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;
}


dsQuadro 10.04.2012 18:20

2Aquahawk: это ответ скорее на вопрос из соседней ветки

я же спрашиваю как узнать обладателя функции, а не того кто вызывает эту функцию.
тоесть:
Код AS3:

class A{
    public function setCallBack(func:Function):void{
        // тут надо узнать кому принадлежит func
    }
}

Добавлено через 6 минут
2ChuwY: спасибо, я понял что ты предложил в первый раз... интересный вариант, но он дает нам понимание того какому КЛАССУ принадлежит эта функция, а не ссылку на ЭКЗЕМПЛЯР КЛАССА которому принадлежит присланная функция.

а по архитектуре зачем моглобы такое пригодиться(к сожалению, получается что не прокатит), можно было бы сделать обертку эвент диспетчеру, который подписчиков заносил бы в массив, а потом вызвав метод и передав в него себя, можно было бы отписаться сразу от всего к чему подписан.
Понимаю что можно по разному этот вопрос решить...

alatar 10.04.2012 19:48

В дебаг версии и в доверенном окружении можно получить через getSavedThis.


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

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