Estoy tratando de obtener el nombre de la función que se está ejecutando actualmente. Por lo que he leído, esto debería ser posible usando:javascript - arguments.callee.toString() y arguments.callee.name no devuelve el nombre de función
(arguments.callee.toString()).match(/function\s+(\[^\s\(]+)/)
Sin embargo, cuando ejecuto esto en Firefox y Safari (últimas versiones en Mac) no se devuelve el nombre.
console.log (arguments.callee) devuelve el origen de la función, pero no el nombre asignado. arguments.callee.name devuelve una cadena vacía.
Mi código de ejemplo es el siguiente:
var testobj = {
testfunc: function(){
console.log((arguments.callee.toString()).match(/function\s+(\[^\s\(]+)/));
}
}
testobj.testfunc();
¿Puedo preguntar, por qué quiere/necesita hacer esto? – James
Yah. Así que estoy trabajando en un proyecto de mascotas que implica el encadenamiento de funciones. Tengo aproximadamente 50 funciones diferentes que ejecutan el mismo código, excepto que una variable particular en ellas se define como el mismo nombre de la función. Quiero reducir toda la duplicación a una sola función que detecta el nombre de la función de llamada y utiliza ese nombre como la variable que está codificada actualmente. Con este método, puedo definir todas mis funciones en una sola línea. – Geuis
'toString()' funciones de ing como este (alias función "descompilación") tiene sus verrugas. Consulte http://perfectionkills.com/those-tricky-functions/, http://perfectionkills.com/detecting-built-in-host-methods/, http://my.opera.com/hallvors/blog/show .dml/1665828 y http://my.opera.com/hallvors/blog/2007/07/07/prototype-findorstore-considered-harmful –