Mozilla's getting a new look. What do you think? https://mzl.la/brandsurvey

Function.caller

No estándar
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.

Resumen

La propiedad function.caller retorna la función que llamó a la función especificada.

Descripción

Si la función f fue llamada por desde nivel raiz (top level code), el valor de f.caller es null, de lo contrario se retorna la función que llamó a f.

Esta propiedad reemplaza a la propiedad obsoleta arguments.caller del objeto arguments.

la propiedad especial __caller__, la cual retornaba el objeto de activación del llamador y permitía reconstruir la pila de llamadas, ha sido removida por motivos de seguridad.

Notas

En caso de recursión se puede reconstruir la pila de llamada utilizando esta propiedad, tal como se muestra a continuación:

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

Al momento de ejecutar stop() este se llama con la siguiente pila de llamadas:

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

Siendo verdadero la siguiente consideración:

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

Por lo tanto si se intenta obtener el rastro de llamadas (stack trace) de la función stop() como se muestra a continuación:

var f = stop;
var stack = 'Stack trace:';
while (f) {
  stack += '\n' + f.name;
  f = f.caller;
}

se provocará una bucle que nunca termina.

Ejemplos

Ejemplo: Verificar el valor de la propiedad caller de una función

El siguiente código verifica el valor de la propiedad caller de una función.

function myFunc() {
  if (myFunc.caller == null) {
    return 'The function was called from the top!';
  } else {
    return 'This function\'s caller was ' + myFunc.caller;
  }
}

Especificación

No es parte de ninguna especificación. Se implementa en JavaScript 1.5.

Compatiblilidad de Navegadores

Feature Chrome Firefox (Gecko) Internet Explorer Opera Safari
Soporte Básico (Yes) 1.0 (1.7 or earlier) (Yes) (Yes) (Yes)
Feature Android Chrome for Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
Soporte Básico (Yes) (Yes) 1.0 (1.0) (Yes) (Yes) (Yes)

Véase también

  • Problema de implementación para SpiderMonkey bug 65683

Etiquetas y colaboradores del documento

 Colaboradores en esta página: DavidBernal, fabianlucena
 Última actualización por: DavidBernal,