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.

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

Update compatibility data on GitHub
DesktopMobileServer
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewChrome for AndroidFirefox for AndroidOpera for AndroidSafari on iOSSamsung InternetNode.js
caller
Non-standard
Chrome Full support YesEdge Full support 12Firefox Full support 1IE Full support 8Opera Full support YesSafari Full support YesWebView Android Full support YesChrome Android Full support YesFirefox Android Full support 4Opera Android Full support YesSafari iOS Full support YesSamsung Internet Android Full support Yesnodejs Full support Yes

Legend

Full support  
Full support
Non-standard. Expect poor cross-browser support.
Non-standard. Expect poor cross-browser support.

Див. також

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