Как динамически получить имя функции, которая выполнила другую функцию?

1

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

В настоящее время у меня есть следующий код, который не работает:

function Hello() {
  _alert("caller is " + Hello().caller);
}

Bye();
function Bye() {
  Hello();
}

Сообщение об ошибке следующее: ReferenceError: Hello не определено

Если этот метод не работает, возможно, это возможно через параметры?

На целевую функцию может быть несколько Executer Funtions, которая доставляет имя функции Executer, в какое время она выполняется.

Теги:
function
arguments
parameters

2 ответа

1
Лучший ответ

Используйте Hello не называя его:

function Hello() {
  alert("caller is " + Hello.caller);
}

Bye();
function Bye() {
  Hello();
}

Но имейте в виду, что этот код будет работать только в нестрогом режиме. Такой код выдает ошибку:

'use strict';
function Hello() {
  alert("caller is " + Hello.caller);
}

Bye();
function Bye() {
  Hello();
}
  • 0
    Это устарело и не будет работать в строгом режиме и не во всех браузерах: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
  • 0
    @NurbolAlpysbayev Я уже отредактировал свой ответ
1

Там были arguments.callee и arguments.caller (вы можете использовать их google), но теперь они устарели, и в настоящее время нет возможности узнать об этом вызывающем абоненте. Вы должны сделать что-то вроде этого:

function Hello(caller) {
  alert("caller is " + caller);
}

Bye();
function Bye() {
  Hello('Bye');
}
  • 0
    Это не работает ... и мне нужно динамически возвращать имя функции-исполнителя (потому что их может быть больше 1, все с разными именами). Наконец, он возвращает следующее предупреждение: «вызывающий абонент» + вызывающий абонент
  • 0
    Нет. Перепроверил, все работает. F12, Ctrl + V, Enter. Дает ожидаемое предупреждение "Caller is Bye". Вы на Chrome? больше 1, все с разными именами - поэтому каждая такая функция должна отправлять свое имя. Другого пути нет. Только, возможно, некоторые ароматы этого подхода.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню