Можно ли это сделать:
myfile.js:
function foo() {
alert(<my-function-name>);
// pops-up "foo"
// or even better: "myfile.js : foo"
}
У меня в стеке есть каркасы Dojo и jQuery, так что если они облегчают задачу, они доступны.
javascript
jquery
dojo
sprugman
источник
источник
arguments.callee
это не разрешено в строгом режиме.Для неанонимных функций
Но в случае обработчика ошибок результатом будет имя функции обработчика ошибок, не так ли?
источник
Все, что вам нужно, просто. Создать функцию:
После этого, когда вам нужно, вы просто используете:
источник
function getFuncName() { return getFuncName.name }
getFuncName
а не имя вызывающего абонента.По данным МДН
Как уже отмечалось, это применимо, только если ваш скрипт использует «строгий режим». Это в основном по соображениям безопасности, и, к сожалению, в настоящее время альтернативы этому нет.
источник
Это должно сделать это:
Для звонящего просто используйте
caller.toString()
.источник
[
Это должно пойти в категорию "самых уродливых хаков в мире", но здесь вы идете.
Сначала напечатайте имя текущего функции (как и в других ответах) кажется мне ограниченной, поскольку вы уже знаете, что это за функция!
Однако выяснение имени вызывающей функции может быть довольно полезным для функции трассировки. Это с регулярным выражением, но использование indexOf будет примерно в 3 раза быстрее:
источник
Вот способ, который будет работать:
Тогда в ваших тестах:
Обратите внимание, что третий тест будет работать, только если тест находится в / util / functions
источник
getMyName
Функция во фрагменте ниже возвращает имя вызывающей функции. Это хак и полагается на нестандартной функции:Error.prototype.stack
. Обратите внимание, что формат возвращаемой строкиError.prototype.stack
реализован по-разному в разных движках, поэтому это, вероятно, не будет работать везде:О других решениях:
arguments.callee
не допускается в строгом режиме иFunction.prototype.caller
является нестандартным и не допускается в строгом режиме .источник
Другим вариантом использования может быть диспетчер событий, связанный во время выполнения:
Преимущество здесь в том, что диспетчер может быть легко использован повторно, и ему не нужно получать очередь отправки в качестве аргумента, вместо этого он неявно указывается с именем вызова ...
В конце, общий случай, представленный здесь, будет «использовать имя функции в качестве аргумента, чтобы вам не приходилось передавать его явно», и это может быть полезно во многих случаях, таких как необязательный обратный вызов jquery animate (), или в обратном вызове тайм-аутов / интервалов (т.е. вы передаете только имя функции).
источник
Название текущей функции и то, как ее можно получить, изменилось за последние 10 лет, так как этот вопрос был задан.
Теперь, не будучи профессиональным веб-разработчиком, который знает обо всех историях всех браузеров, когда-либо существовавших, вот как это работает для меня в браузере Chrome 2019 года:
Некоторые из других ответов натолкнулись на некоторые хромированные ошибки о строгом коде JavaScript и еще много чего.
источник
Поскольку вы написали функцию с именем
foo
и знаете, что онаmyfile.js
нужна для того, чтобы получать эту информацию динамически?При этом вы можете использовать
arguments.callee.toString()
внутри функции (это строковое представление всей функции) и вывести значение имени функции в регулярное выражение.Вот функция, которая выдаст свое собственное имя:
источник
Сочетание нескольких ответов, которые я видел здесь. (Проверено в FF, Chrome, IE11)
Вызов randomFunction () оповестит строку, содержащую имя функции.
Демонстрация JS Fiddle: http://jsfiddle.net/mjgqfhbe/
источник
Обновленный ответ на этот вопрос можно найти по этому ответу: https://stackoverflow.com/a/2161470/632495
и, если вы не хотите нажимать:
источник
Информация актуальна на 2016 год.
Результаты для объявления функции
Результат в Опере
Результат в Chrome
Результат в NodeJS
Не работает в Firefox. Не проверено на IE и Edge.
Результаты для функциональных выражений
Результат в NodeJS
Результат в Chrome
Не работает в Firefox, Opera. Не проверено на IE и Edge.
Ноты:
источник
Вариант машинописного текста:
Примечание доступно только в двигателях, соответствующих ES6 / ES2015. Для более см.
источник
Вот один вкладыш:
Как это:
источник
Это вариант Игоря Остроумова ответа :
Если вы хотите использовать его в качестве значения по умолчанию для параметра, вам необходимо рассмотреть вызов второго уровня к вызывающей стороне:
Это позволит динамически реализовать многократно используемую реализацию в нескольких функциях.
Если вам тоже нужно имя файла, вот решение, использующее ответ F-3000 на другой вопрос:
источник
Пытаться:
источник
Ответ короткий:
alert(arguments.callee.name);
источник