É possível fazer isso:
myfile.js:
function foo() {
alert(<my-function-name>);
// pops-up "foo"
// or even better: "myfile.js : foo"
}
Eu tenho as estruturas Dojo e jQuery na minha pilha, portanto, se alguma delas facilitar, elas estarão disponíveis.
javascript
jquery
dojo
sprugman
fonte
fonte
arguments.callee
não é permitido no modo estrito.Para funções não anônimas
Mas no caso de um manipulador de erros, o resultado seria o nome da função do manipulador de erros, não?
fonte
Tudo o que você precisa é simples. Criar função:
Depois disso, sempre que precisar, basta usar:
fonte
function getFuncName() { return getFuncName.name }
getFuncName
chamador e não o nome do chamador.De acordo com a MDN
Conforme observado, isso se aplica apenas se o seu script usar "modo estrito". Isso ocorre principalmente por razões de segurança e, infelizmente, atualmente não há alternativa para isso.
fonte
Isso deve servir:
Para o chamador, basta usar
caller.toString()
.fonte
[
Isso deve estar na categoria de "hacks mais feios do mundo", mas aqui está.
Primeiro, imprimir o nome da função atual (como nas outras respostas) parece ter uso limitado para mim, já que você já sabe qual é a função!
No entanto, descobrir o nome da função de chamada pode ser bastante útil para uma função de rastreamento. Isso é com um regexp, mas usar indexOf seria cerca de 3x mais rápido:
fonte
Aqui está uma maneira que funcionará:
Então nos seus testes:
Observe que o terceiro teste só funcionará se o teste estiver localizado em / util / functions
fonte
A
getMyName
função no trecho abaixo retorna o nome da função de chamada. É um hack e depende de não-padrão recurso:Error.prototype.stack
. Observe que o formato da string retornada porError.prototype.stack
é implementado de maneira diferente em diferentes mecanismos, portanto, isso provavelmente não funcionará em qualquer lugar:Sobre outras soluções:
arguments.callee
não é permitido no modo estrito e nãoFunction.prototype.caller
é padrão e não é permitido no modo estrito .fonte
Outro caso de uso pode ser um distribuidor de eventos vinculado no tempo de execução:
A vantagem aqui é que o despachante pode ser facilmente reutilizado e não precisa receber a fila de despacho como argumento. Em vez disso, é implícito com o nome da chamada ...
No final, o caso geral apresentado aqui seria "usar o nome da função como argumento para que você não precise transmiti-lo explicitamente", e isso pode ser útil em muitos casos, como o retorno de chamada opcional jquery animate (), ou em retornos de chamada de intervalos / intervalos (ou seja, você passa apenas uma função NAME).
fonte
O nome da função atual e como ela pode ser obtida parece ter mudado nos últimos 10 anos, desde que essa pergunta foi feita.
Agora, não sendo um desenvolvedor profissional da Web que conhece todas as histórias de todos os navegadores que já existiram, eis como funciona para mim em um navegador Chrome de 2019:
Algumas das outras respostas encontraram alguns erros de cromo sobre código estrito de javascript e outros enfeites.
fonte
Desde que você escreveu uma função nomeada
foo
e sabe que está nela,myfile.js
por que você precisa obter essas informações dinamicamente?Dito isto, você pode usar
arguments.callee.toString()
dentro da função (esta é uma representação de string de toda a função) e regexar o valor do nome da função.Aqui está uma função que cuspirá seu próprio nome:
fonte
Uma combinação das poucas respostas que eu vi aqui. (Testado em FF, Chrome, IE11)
Chamar randomFunction () alertará uma string que contém o nome da função.
Demonstração JS Fiddle: http://jsfiddle.net/mjgqfhbe/
fonte
Uma resposta atualizada para isso pode ser encontrada nesta resposta: https://stackoverflow.com/a/2161470/632495
e, se você não quiser clicar:
fonte
As informações são atuais no ano de 2016.
Resultados para declaração de função
Resultado na Ópera
Resultado no Chrome
Resultado no NodeJS
Não funciona no Firefox. Não testado no IE e no Edge.
Resultados para expressões de função
Resultado no NodeJS
Resultado no Chrome
Não funciona no Firefox, Opera. Não testado no IE e no Edge.
Notas:
fonte
Variação tipográfica:
Nota disponível apenas em mecanismos compatíveis com ES6 / ES2015. Para mais, veja
fonte
Aqui está um liner:
Como isso:
fonte
Essa é uma variante da resposta de Igor Ostroumov :
Se você deseja usá-lo como um valor padrão para um parâmetro, considere uma chamada de segundo nível para 'chamador':
Isso permitiria dinamicamente uma implementação reutilizável em várias funções.
Se você quiser o nome do arquivo também, aqui está essa solução usando a resposta do F-3000 em outra pergunta:
fonte
Experimentar:
fonte
A resposta é curta:
alert(arguments.callee.name);
fonte