AS3 - Могу ли я получить доступ к объекту (или функции), который мне звонит? - PullRequest
4 голосов
/ 15 марта 2010

Я задал этот тот же вопрос с Python.

Теперь я хотел бы знать, можно ли это сделать в AS3.

Если у меня есть что-то вроде этого:

package
{
    public class SomeClass
    {
        private function A():void { C() }
        private function B():void { C() }

        private function C():void
        {
            // who is the caller, A or B ???
        }

        public function SomeClass()
        {
            A()
            B()
        }
    }
}

Несмотря на дизайн или другие проблемы, это всего лишь вопрос пытливого ума.

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

Примечание 2: Это должно быть сделано без изменения function C() подпись

Ответы [ 2 ]

5 голосов
/ 15 марта 2010

"В отличие от предыдущих версий ActionScript, ActionScript 3.0 не имеет свойства arguments.caller. Чтобы получить ссылку на функцию, вызвавшую текущую функцию, необходимо передать ссылку на эту функцию в качестве аргумента."

С http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/arguments.html

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

1 голос
/ 15 марта 2010

Конечно, это можно сделать. Вы можете сделать что-то вроде

private function C():void
{
  var e:Error = new Error();
  var stack:String = e.getStackTrace();
  //analyze stack and find out which function called it.
}

это ужасно, но это сработало бы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...