Function.caller

Non-standard

This feature is non-standard and is not on a standards track. Do not use it on production sites facing the Web: it will not work for every user. There may also be large incompatibilities between implementations and the behavior may change in the future.

Властивість 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()

Наступне дорівнює true:

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.

Сумісність з веб-переглядачами

BCD tables only load in the browser

Див. також

  • Помилка реалізації для SpiderMonkey bug 65683