Может ли метод Flex 3 обнаружить вызывающий объект?

Если у меня есть такой метод, как:

private function testMethod(param:string):void
{
  // Get the object that called this function
}

Могу ли я определить, какой объект нас вызвал, внутри testMethod? например

class A
{
  doSomething()
  {
    var b:B = new B();
    b.fooBar();
  }
}

class B
{
  fooBar()
  {
    // Can I tell that the calling object is type of class A?
  }
}
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
0
4 852
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Ответ принят как подходящий

К сожалению, ответ отрицательный (см. Правку ниже). Функции получили специальное свойство arguments, а в AS2 оно имело свойство caller, которое могло бы делать примерно то, что вы хотите. Хотя объект arguments по-прежнему доступен в AS3, свойство вызывающего объекта было удалено из AS3 (и, следовательно, Flex 3), поэтому прямого способа делать то, что вы хотите, нет. Также рекомендуется использовать параметр [... rest] (языковая функция http://livedocs.adobe.com/flex/3/langref/statements.html#..._(rest)_parameter) вместо аргументы.

Вот ссылка по делу (найдите вызываемого, чтобы найти соответствующие детали).

Редактировать: Дальнейшее исследование показало, что можно получить трассировку стека для текущей выполняющейся функции, поэтому, если вам повезет, вы можете что-то с этим сделать. Подробнее см. эта запись в блоге и это сообщение на форуме.

Основная идея сообщения в блоге заключается в том, что вы выдаете ошибку, а затем сразу ее ловите, а затем анализируете трассировку стека. Уродливо, но это может сработать для вас.

код из сообщения в блоге:


var stackTrace:String;

try { throw new Error(); }
catch (e:Error) { stackTrace = e.getStackTrace(); }

var lines:Array = stackTrace.split("\n");
var isDebug:Boolean = (lines[1] as String).indexOf('[') != -1;

var path:String;
var line:int = -1;

if (isDebug)
{
    var regex:RegExp = /at\x20(.+?)\[(.+?)\]/i;
    var matches:Array = regex.exec(lines[2]);

    path = matches[1];

    //file:line = matches[2]
    //windows == 2 because of drive:\
    line = matches[2].split(':')[2];
}
else
{
    path = (lines[2] as String).substring(4);
}

trace(path + (line != -1 ? '[' + line.toString() + ']' : ''));

Хм, хороший ответ. Не уверен, что мне нравится идея бросать и ловить такую ​​ошибку. Возможно, мне просто придется передать thisObject в качестве параметра моей функции (чтобы я мог использовать метод Function.call ()).

Mark Ingram 12.10.2008 03:22

Я бы поддержал идею явной передачи параметра «вызывающий объект». Если вы не делаете действительно сложных вещей, в любом случае для вызывающей стороны должно быть лучше иметь возможность предоставить целевой объект. (Извините, если это кажется очевидным, я не могу сказать, чего вы пытаетесь достичь.)

Чтобы добавить к несколько двусмысленному первому абзацу Джеймса: свойство arguments все еще доступно внутри объекта Function, но свойство caller было удалено.

Вот ссылка на документы: http://livedocs.adobe.com/flex/3/langref/arguments.html

Спасибо за совет - я обновил свой ответ, включив в него эту информацию.

James Fassett 12.10.2008 11:44

Важно знать, что stackTrace доступен только в отладочной версии Flash Player. Извиняюсь! :(

Это может кому-то помочь, я не уверен ... но если кто-то использует Event, это возможно с помощью e.currentTarget следующим образом:

private function button_hover(e:Event):void
{
      e.currentTarget.label = "Hovering";
}

Другие вопросы по теме