Esta página foi traduzida do inglês pela comunidade.Saiba mais e junte-se à comunidade MDN Web Docs.
Function.caller
Não padrão: Este recurso não é padronizado. Não recomendamos o uso de recursos não padronizados em produção, pois eles têm suporte limitado nos navegadores e podem mudar ou ser removidos. No entanto, podem ser uma alternativa viável em casos específicos onde não exista uma opção padrão.
A propriedadefunction.caller retorna a função que invocou a função especificada.
In this article
Descrição
Se a funçãof foi invocada pelo codigo mais alto nível, o valor def.caller énull, caso contrario, o valor será a função a qual invocouf.
Esta propriedade substitui a propriedade obsoletaarguments.caller do objetoarguments.
A propriedade especial__caller__, a qual retornou o objeto de ativação do chamador, permitindo assin reconstruir o stack, foi removido por motivo de segurança.
Notas
Note que no caso de recurção, você não pode reconstruir o stack de chamadas usando esta propriedade. Considere:
function f(n) { g(n - 1);}function g(n) { if (n > 0) { f(n); } else { stop(); }}f(2);No momento em questop() é chamado o stack será:
f(2) -> g(1) -> f(1) -> g(0) -> stop()O seguinte é true:
stop.caller === g && f.caller === g && g.caller === f;então se você tentou recuperar o stack trace na funçãostop() assim:
var f = stop;var stack = "Stack trace:";while (f) { stack += "\n" + f.name; f = f.caller;}o loop nunca irá parar.
Exemplos
>Verificando o valor da propriedadecaller de uma função
O código a seguir verifica o valor da propriedadecaller de uma função.
function myFunc() { if (myFunc.caller == null) { return "The function was called from the top!"; } else { return "This function's caller was " + myFunc.caller; }}Especificações
Não faz parte de nenhuma especificação. Implementado no JavaScript 1.5.
Compatibilidade com navegadores
Ver também
- Implementation bug for SpiderMonkeyErro do Firefox 65683