MDN wants to learn about developers like you: https://qsurvey.mozilla.com/s3/MDN-dev-survey

Не стандартно
Эта возможность не является стандартной и стандартизировать её пока никто не собирается. Не используйте её на сайтах, смотрящих во внешний мир: она будет работать не у всех пользователей. Также могут присутствовать большие несовместимости между реализациями и её поведение может в будущем измениться.

Сводка

Свойство function.caller возвращает функцию, которая вызвала указанную функцию.

Описание

Если функция f была вызвана из кода самого верхнего уровня, значение f.caller будет равно null, в противном случае значение будет равно функции, вызвавшей f.

Это свойство пришло на замену удалённого свойства arguments.caller объекта arguments.

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

Примечания

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

function f(n) { g(n - 1); }
function g(n) { if (n > 0) { f(n); } else { stop(); } }
f(2);

В момент вызова функции stop(), стек вызовов имеет следующий вид:

f(2) -> g(1) -> f(1) -> g(0) -> stop()

Следующее условие верно:

stop.caller === g && f.caller === g && g.caller === f

так что если вы попытаетесь оттрассировать стек в функции stop() подобным образом:

var f = stop;
var stack = 'Трассировка стека:';
while (f) {
  stack += '\n' + f.name;
  f = f.caller;
}

то этот цикл никогда не остановится.

Примеры

Пример: проверка значения свойства caller функции

Следующий код проверяет значение свойства caller функции.

function myFunc() {
  if (myFunc.caller == null) {
    return 'Эта функция была вызвана из верхнего уровня!';
  } else {
    return 'Эта функция была вызвана из ' + myFunc.caller;
  }
}

Спецификации

Не является частью какой-либо спецификации. Реализована в JavaScript 1.5.

Совместимость с браузерами

Возможность Chrome Firefox (Gecko) Internet Explorer Opera Safari
Базовая поддержка (Да) 1.0 (1.7 или ранее) (Да) (Да) (Да)
Возможность Android Chrome для Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
Базовая поддержка (Да) (Да) 1.0 (1.0) (Да) (Да) (Да)

Смотрите также

Метки документа и участники

Метки: 
 Внесли вклад в эту страницу: Mingun
 Обновлялась последний раз: Mingun,