Es posible hacer esto:
myfile.js:
function foo() {
alert(<my-function-name>);
// pops-up "foo"
// or even better: "myfile.js : foo"
}
Tengo los marcos Dojo y jQuery en mi pila, así que si alguno de ellos lo hace más fácil, están disponibles.
javascript
jquery
dojo
Sprugman
fuente
fuente
arguments.callee
no está permitido en modo estricto.Para funciones no anónimas
Pero en caso de un controlador de errores, el resultado sería el nombre de la función del controlador de errores, ¿no?
fuente
Todo lo que necesitas es simple. Crear función:
Después de eso, siempre que lo necesite, simplemente use:
fuente
function getFuncName() { return getFuncName.name }
getFuncName
lugar del nombre de la persona que llama.De acuerdo con MDN
Como se señaló, esto se aplica solo si su script usa "modo estricto". Esto es principalmente por razones de seguridad y lamentablemente actualmente no hay alternativa para esto.
fuente
Esto debería hacerlo:
Para la persona que llama, solo use
caller.toString()
.fuente
[
Esto tiene que ir en la categoría de "hacks más feos del mundo", pero aquí tienes.
Primero, imprimir el nombre de la función actual (como en las otras respuestas) parece tener un uso limitado para mí, ¡ya que ya sabes cuál es la función!
Sin embargo, averiguar el nombre de la función de llamada podría ser bastante útil para una función de rastreo. Esto es con una expresión regular, pero usar indexOf sería aproximadamente 3 veces más rápido:
fuente
Aquí hay una manera que funcionará:
Luego en tus pruebas:
Tenga en cuenta que la tercera prueba solo funcionará si la prueba se encuentra en / util / functions
fuente
La
getMyName
función en el fragmento a continuación devuelve el nombre de la función de llamada. Es un truco y se basa en la no-estándar de función:Error.prototype.stack
. Tenga en cuenta que el formato de la cadena devuelta porError.prototype.stack
se implementa de manera diferente en diferentes motores, por lo que esto probablemente no funcionará en todas partes:Acerca de otras soluciones:
arguments.callee
no está permitido en modo estricto y noFunction.prototype.caller
es estándar y no está permitido en modo estricto .fuente
Otro caso de uso podría ser un despachador de eventos vinculado en tiempo de ejecución:
La ventaja aquí es que el despachador se puede reutilizar fácilmente y no tiene que recibir la cola de despacho como argumento, sino que viene implícito con el nombre de la invocación ...
Al final, el caso general presentado aquí sería "usar el nombre de la función como argumento para que no tenga que pasarlo explícitamente", y eso podría ser útil en muchos casos, como la devolución de llamada opcional jquery animate (), o en tiempos de espera / intervalos de devolución de llamada (es decir, solo pasa un NOMBRE de función).
fuente
El nombre de la función actual y cómo se puede obtener parece haber cambiado en los últimos 10 años, ya que se hizo esta pregunta.
Ahora, al no ser un desarrollador web profesional que conozca todas las historias de todos los navegadores que hayan existido, así es como funciona para mí en un navegador Chrome 2019:
Algunas de las otras respuestas se encontraron con algunos errores de Chrome sobre el código JavaScript estricto y otras cosas.
fuente
Dado que ha escrito una función llamada
foo
y sabe que es así,myfile.js
¿por qué necesita obtener esta información dinámicamente?Dicho esto, puede usar
arguments.callee.toString()
dentro de la función (esta es una representación de cadena de toda la función) y expresar el valor del nombre de la función.Aquí hay una función que escupirá su propio nombre:
fuente
Una combinación de las pocas respuestas que he visto aquí. (Probado en FF, Chrome, IE11)
Llamar a randomFunction () alertará a una cadena que contiene el nombre de la función.
Demostración de JS Fiddle: http://jsfiddle.net/mjgqfhbe/
fuente
Puede encontrar una respuesta actualizada a esto en esta respuesta: https://stackoverflow.com/a/2161470/632495
y, si no tiene ganas de hacer clic:
fuente
La información es actual en el año 2016.
Resultados para la declaración de función
Resultado en la Opera
Resultado en el Chrome
Resultado en el NodeJS
No funciona en Firefox. No probado en el IE y The Edge.
Resultados para expresiones de funciones
Resultado en el NodeJS
Resultado en el Chrome
No funciona en Firefox, Opera. No probado en el IE y The Edge.
Notas:
fuente
Variación mecanografiada:
Nota solo disponible en motores compatibles con ES6 / ES2015. Para más ver
fuente
Aquí hay una línea:
Me gusta esto:
fuente
Esta es una variante de la respuesta de Igor Ostroumov :
Si desea utilizarlo como valor predeterminado para un parámetro, debe considerar una llamada de segundo nivel a 'llamante':
Esto permitiría dinámicamente una implementación reutilizable en múltiples funciones.
Si también desea el nombre del archivo, aquí está esa solución usando la respuesta de F-3000 en otra pregunta:
fuente
Tratar:
fuente
La respuesta es corta:
alert(arguments.callee.name);
fuente