Esta página ha sido traducida del inglés por la comunidad.Aprende más y únete a la comunidad de MDN Web Docs.
Function.caller
No estándar: Esta función no está estandarizada. No recomendamos usar funciones no estándar en producción, ya que tienen un soporte limitado en los navegadores y pueden cambiar o eliminarse. Sin embargo, pueden ser una alternativa adecuada en casos específicos donde no exista una opción estándar.
In this article
Resumen
La propiedadfunction.caller retorna la función que llamó a la función especificada.
Descripción
Si la funciónf fue llamada por desde nivel raiz (top level code), el valor def.caller esnull, de lo contrario se retorna la función que llamó af.
Esta propiedad reemplaza a la propiedad obsoletaarguments.caller del objetoarguments.
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 ejecutarstop() 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ónstop() 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 propiedadcaller de una función
El siguiente código verifica el valor de la propiedadcaller 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.
Compatiblilidad de Navegadores
Véase también
- Problema de implementación para SpiderMonkeyError 65683 en Firefox