ES6 (inspirado por la respuesta de sendy halim a continuación):
myFunction.name
Explicación sobre MDN . A partir de 2015 funciona en nodejs y en todos los principales navegadores, excepto IE.
Nota: En las funciones enlazadas, esto dará " bound <originalName>
". Tendrá que quitar el "límite" si desea obtener el nombre original.
ES5 (inspirado por la respuesta de Vlad):
Si tiene una referencia a la función, puede hacer:
function functionName( func )
{
// Match:
// - ^ the beginning of the string
// - function the word 'function'
// - \s+ at least some white space
// - ([\w\$]+) capture one or more valid JavaScript identifier characters
// - \s* optionally followed by white space (in theory there won't be any here,
// so if performance is an issue this can be omitted[1]
// - \( followed by an opening brace
//
var result = /^function\s+([\w\$]+)\s*\(/.exec( func.toString() )
return result ? result[ 1 ] : '' // for an anonymous function there won't be a match
}
- No he realizado pruebas unitarias sobre esto, ni he verificado diferencias de implementación, pero en principio debería funcionar, si no deja un comentario.
- Nota: no funcionará en funciones enlazadas
- Nota: eso
caller
y callee
se consideran obsoletos.
[1] Lo incluyo aquí porque es legal y, a menudo, suficientes herramientas de resaltado de sintaxis no tienen en cuenta el espacio en blanco entre el nombre de la función y el paréntesis. Por otro lado, no conozco ninguna implementación de .toString () que incluya espacios en blanco aquí, por lo que puede omitirlo.
Como respuesta a la pregunta original, dejaría la herencia parasitaria y elegiría algunos patrones de diseño OOP más tradicionales. Escribí un TidBits.OoJs para escribir cómodamente el código OOP en JavaScript con un conjunto de características que imita C ++ (aún no está completo, pero en su mayoría).
Veo por los comentarios que le gustaría evitar pasar las parent
necesidades de información a su constructor. Sin embargo, debo admitir que los patrones de diseño tradicionales no lo salvarán de ese, ya que generalmente se considera bueno hacer que sus dependencias sean obvias y forzadas.
También sugeriría alejarse de las funciones anónimas. Solo realizan depuración y creación de perfiles de un PITA porque todo aparece como "función anónima", y no hay ningún beneficio para ellos que yo sepa.