Ho bisogno del nome della funzione corrente come stringa per accedere alla nostra funzione di registro. Ma arguments.callee.name
funziona solo in modalità libera. Come ottenere il nome della funzione sotto "use strict"
?Ottieni il nome della funzione corrente in modalità rigorosa
risposta
Ai fini della registrazione/debug, è possibile creare un nuovo Error
oggetto nel registratore e controllare la sua proprietà .stack
, per esempio
function logIt(message) {
var stack = new Error().stack,
caller = stack.split('\n')[2].trim();
console.log(caller + ":" + message);
}
function a(b) {
b()
}
a(function xyz() {
logIt('hello');
});
La tua risposta è un po 'complicata, ma mostra l'idea. – exebook
Una grande risposta @georg. Nota che '' [2] '' è relativo solo a questo esempio, se hai per esempio uno stack contenente tre funzioni genitore in questo caso dobbiamo cambiare ** 2 ** a ** 3 ** – Ismail
@hamism: 'stack [2] 'è sempre la funzione che ha chiamato il logger, indipendentemente dalla profondità dello stack. – georg
Dopo po 'di ricerca qui è una buona soluzione:
function getFnName(fn) {
var f = typeof fn == 'function';
var s = f && ((fn.name && ['', fn.name]) || fn.toString().match(/function ([^\(]+)/));
return (!f && 'not a function') || (s && s[1] || 'anonymous');
}
function test(){
console.log(getFnName(this));
}
test = test.bind(test);
test(); // 'test'
Ma ciò non funziona all'interno della funzione a meno che non si abbia già un riferimento alla funzione. OP ha chiesto un sostituto per 'arguments.callee.name' ... – nnnnnn
È possibile associare la funzione come il suo contesto, allora è possibile accedere a suo nome tramite this.name
proprietà:
function x(){
console.log(this.name);
}
x.bind(x)();
- 1. Ottieni il nome della funzione VBA corrente
- 2. PHP Ottieni il nome della directory corrente
- 3. Ottieni il nome del metodo corrente
- 4. Come ottenere il nome della funzione corrente?
- 5. Actionscript - Ottenere il nome della funzione corrente
- 6. Ottieni il nome dell'utente corrente
- 7. Ottieni il nome dell'ambiente corrente
- 8. Ottieni il nome host della richiesta corrente in node.js Express
- 9. Ottieni il nome editore dell'applicazione ClickOnce corrente?
- 10. violazioni modalità rigorosa
- 11. PHPUnità della modalità rigorosa - come modificare il timeout predefinito
- 12. Qual è il vantaggio della modalità DI rigorosa AngularJS?
- 13. Ottieni il nome della funzione utilizzando la riflessione in Golang
- 14. Groovy, ottieni il nome della funzione in allegato?
- 15. Modalità rigorosa in un namespace con Javascript
- 16. Ottieni nome utente corrente in Julia (Linux)
- 17. Ottieni il nome del metodo corrente
- 18. Ottieni il nome dell'applicazione attiva corrente
- 19. Come ottenere il chiamante dalla modalità rigorosa?
- 20. Ottieni il contesto owin corrente in modalità auto host
- 21. Modalità rigorosa: alternativa a argument.callee.length?
- 22. Ottieni il nome del processo corrente (eseguibile) in Vai?
- 23. Ottieni il nome della sottoclasse?
- 24. Ottieni il nome del metodo corrente in esecuzione
- 25. Ottieni nome file corrente in JSP
- 26. Forza la modalità sql rigorosa in django
- 27. Ottieni il nome della funzione nello script KornShell
- 28. Variabili globali in modalità rigorosa JavaScript
- 29. Nome Emac della keymap locale corrente?
- 30. Ottieni il nome della superclasse in ES6
Se si è in grado di modificare il corpo della funzione per aggiungere codice di registrazione, non puoi semplicemente codificare il nome della funzione? Che vantaggio avresti se potessi leggerlo da una proprietà? – nnnnnn
@nnnnnn qualcuno continua a rinominare le funzioni ma si dimentica di aggiornare la linea di registro. – exebook