Potrzebuję aktualnej nazwy funkcji jako ciąg do zalogowania się do naszego obiektu rejestru. Ale arguments.callee.name
działa tylko w trybie luźnym. Jak uzyskać nazwę funkcji pod numerem "use strict"
?Pobierz bieżącą nazwę funkcji w trybie ścisłym.
Odpowiedz
Dla celów rejestrowania/debugowania, można utworzyć nowy Error
obiekt w rejestratorze i skontrolować jego .stack
własności, np
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');
});
Twoja odpowiedź jest nieco skomplikowana, ale pokazuje pomysł. – exebook
Świetna odpowiedź @georg. Zauważ, że '' [2] '' odnosi się tylko do tego przykładu, jeśli masz na przykład stos zawierający trzy funkcje rodzicielskie w tym przypadku, musimy zmienić ** 2 ** na ** 3 ** – Ismail
@ ramka: 'stos [2] 'jest zawsze funkcją, która nazwała rejestrator, bez względu na to, jak głęboki jest stos. – georg
Po trochę badań tutaj jest dobrym rozwiązaniem:
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'
Ale to nie działa z poziomu funkcji, chyba że masz już odwołanie do funkcji. OP poprosił o zastąpienie 'arguments.callee.name' ... – nnnnnn
Można powiązać funkcję kontekstu następnie można uzyskać dostęp do jego nazwę poprzez this.name
nieruchomości:
function x(){
console.log(this.name);
}
x.bind(x)();
- 1. Pobierz bieżącą nazwę metody
- 2. Pobierz bieżącą aktywną nazwę aplikacji
- 3. Pobierz bieżącą nazwę pliku w JSP
- 4. Pobierz bieżącą nazwę widoku w ASP.NET MVC?
- 5. Nodejs: pobierz nazwę funkcji dzwoniącego
- 6. pobierz nazwę funkcji wewnątrz niego
- 7. Literały ósemkowe są niedozwolone w trybie ścisłym.
- 8. Pobierz bieżącą nazwę domeny za pomocą Javascript (nie ścieżkę itp.)
- 9. Pobierz bieżącą ścieżkę folderu
- 10. Pobierz bieżącą nazwę pliku z parametrami adresu URL
- 11. Dlaczego usuwanie nie jest dozwolone w trybie ścisłym Javascript5?
- 12. React JS pobierz bieżącą datę
- 13. Pobierz bieżącą MethodBase poprzez odbicie
- 14. Odbicie - pobierz nazwę właściwości
- 15. Pobierz bieżącą ścieżkę w komponencie reagowania
- 16. Angular 2 pobierz bieżącą trasę w straży
- 17. Jak przesłonić Function.length, aby zwrócić długość tablicy, w trybie ścisłym
- 18. SyntaxError: Wyrażenia 'with' nie są poprawne w trybie ścisłym.
- 19. węzeł 0.12.x const w trybie ścisłym wydanie
- 20. Visual Studio Task Runner "SyntaxError: Użycie const w trybie ścisłym."
- 21. Nieoczekiwane użycie słowa zarezerwowanego "let" w trybie ścisłym
- 22. Jak odzyskać bieżącą nazwę strony w JSP?
- 23. Jak uzyskać bieżącą nazwę hosta w Heroku?
- 24. golang: pobierz bieżący zakres nazwy funkcji
- 25. pobierz nazwę rozszerzonej klasy
- 26. Pobierz bieżącą piosenkę za pomocą Cocoa
- 27. pobierz bieżącą ścieżkę wykonywanego pliku .app
- 28. PHP: pobierz nazwę przeglądarki
- 29. Pobierz bieżącą aktywną kartę przez JS.
- 30. Pobierz bieżącą lokalizację na mapie Google
Jeśli jesteś w stanie zmodyfikować ciało funkcja, aby dodać kod logowania, nie możesz po prostu zakodować nazwy funkcji? Jaką korzyść miałbyś, gdybyś mógł ją przeczytać z nieruchomości? – nnnnnn
@nnnnnn Ktoś ciągle zmienia nazwy, ale zapomina zaktualizować wiersz dziennika. – exebook