Мне нужно имя текущей функции в виде строки для входа в наш журнал. Но arguments.callee.name
работает только в свободном режиме. Как получить имя функции под "use strict"
?Получить текущее имя функции в строгом режиме
ответ
Для целей регистрации/отладки, вы можете создать новый объект Error
в регистраторе и проверить его свойство .stack
, например,
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');
});
. Ваш ответ немного сложный, но он показывает идею. – exebook
Отличный ответ @georg. Обратите внимание, что '' [2] '' относится только к этому примеру, если у вас есть, например, стек, содержащий три родительские функции, в этом случае мы должны изменить ** 2 ** на ** 3 ** – Ismail
@ amism: 'stack [2] 'всегда является функцией, называемой регистратором, независимо от глубины стека. – georg
После небольшого исследования здесь является хорошим решением:
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'
Источник: https://gist.github.com/dfkaye/6384439
Но это не работает из функции, если у вас уже нет ссылки на функцию. OP попросил заменить «arguments.callee.name' ... – nnnnnn
Вы можете связать функцию контекста, то вы можете получить доступ к его имени через this.name
собственности:
function x(){
console.log(this.name);
}
x.bind(x)();
- 1. Как найти вызов функции в строгом режиме
- 2. Получить функцию «self» в строгом режиме JavaScript
- 3. Вызов в строгом режиме
- 4. Объект в строгом режиме
- 5. Получить текущее имя метода
- 6. 100% в строгом режиме
- 7. Определение переменной в строгом режиме
- 8. Получить имя функции изнутри функции
- 9. body.scrollTop устарел в строгом режиме.
- 10. delete HTMLElement в строгом режиме
- 11. Как назначить имя параметра в строгом режиме javascript?
- 12. Python3: получить текущее имя окна?
- 13. Получить текущее имя шаблона?
- 14. Получить текущее имя пользователя
- 15. Получить текущее имя столбца
- 16. Получить текущее имя ScheduledJob
- 17. Получить текущее имя среды
- 18. Получить текущее имя компонента
- 19. Почему исключение запрещено в строгом режиме Javascript5?
- 20. Почему GCC не использует встроенные функции в строгом режиме?
- 21. Выполняют ли самозапускаемые функции в строгом режиме IE?
- 22. получить имя этой функции в определении прототипа
- 23. передать текущее имя цели функции
- 24. in_array несколько игл в строгом режиме
- 25. Вызванное вызывное выражение Expression в строгом режиме
- 26. Глобальные переменные в строгом режиме JavaScript
- 27. как знать нарушение в строгом режиме
- 28. Как вставить в провайдера в строгом режиме
- 29. Можно ли получить текущее имя функции (члена) в C++?
- 30. Получить текущее имя функции в контексте шаблона Колба
Если вы в состоянии изменить тело функции, чтобы добавить код протоколирования, не можете ли вы просто скопировать имя функции? Какое преимущество у вас было бы, если бы вы могли прочитать его из собственности? – nnnnnn
@nnnnnn кто-то сохраняет функции переименования, но забывает обновлять строку журнала. – exebook