Js получить имя функции

Имена

Получить имя функции в JavaScript

Кто-нибудь знает, есть ли способ получить имя функции JavaScript. Например я получил функцию типа

У меня это есть в моем головном отделе. Затем я создаю объект obj1 и помещаю туда свою функцию

Когда я вызываю метод в obj1 object, есть ли у меня какой-либо способ получить мое имя функции (test1) внутри этого метода, кроме синтаксического анализа источника ( this.func.toString() ) функции.

7 ответов

Есть ли способ получить имя функции извне? Допустим, на веб-странице есть скрипт js, который мы не можем изменить, просто прочитайте. Скрипт содержит объект, который содержит объекты и функции. Допустим, мы хотим найти функцию с именем HelloWorld. С помощью firebug мы перебираем эти объекты и.

выводит «test» (в Chrome, Firefox и, вероятно, Safari). Однако arguments.callee.name доступен только изнутри функции.

Если вы хотите получить имя извне вы можете разобрать его из:

но я думаю, что свойство name объекта function может быть тем, что вам нужно:

однако это не похоже на работу для IE и Opera, поэтому вы остаетесь с разбором его вручную в этих браузерах.

Вот что я использую, чтобы поместить имена классов в сообщения об ошибках. Он включает в себя код для получения названия функций, который работает в большинстве браузеров.

Очевидно, что нет стандартного способа, который всегда работает, поэтому вы всегда должны предоставлять имя, которое можно использовать, если не найдено никакого другого имени.

Я пытаюсь получить имя последней выполненной функции с помощью JavaScript, и этот следующий код работает для меня, но нужно найти любой другой метод доступен? пожалуйста, помогите мне : var fname; function fn() < fname=fn(); >function fn1() < fname=fn1(); >function fexecute() < setTimeout(fname.

Возможный Дубликат : Могу ли я получить имя текущей запущенной функции в javascript? Я хочу получить имя функции от самой функции. Javascript: Cube : < profile : < edit : function()< // Get function Path Cube.edit Here alert(arguments.callee.name); // Not Working >> >

Самое лучшее что можно сделать это:

Примечание: использование Function.caller является нестандартным, а arguments.callee запрещено в строгом режиме.

Вот что происходит, когда вы используете код, основанный на нем:

Так что если вы сделаете следующее:

Это, вероятно, лучший способ сделать это:

Это может быть сделано вне выполнения функции, и вы можете проверить в контексте консоли браузера.

Похожие вопросы:

У меня есть кнопка html с тегом runat=server, имя которого было установлено динамически во время выполнения. protected void Page_Load(object sender, EventArgs e) < btnShowHideCols.Name = some text.

Когда внутри функции я могу получить его параметры name/value? Я ищу, чтобы превратить их в объект, который я могу JSON.stringify(), чтобы я мог передать его в качестве данных для вызова ajax.

Есть ли способ получить имя функции извне? Допустим, на веб-странице есть скрипт js, который мы не можем изменить, просто прочитайте. Скрипт содержит объект, который содержит объекты и функции.

Читайте также:  Как разрешить имя хоста в тс

Я пытаюсь получить имя последней выполненной функции с помощью JavaScript, и этот следующий код работает для меня, но нужно найти любой другой метод доступен? пожалуйста, помогите мне : var fname;.

Возможный Дубликат : Могу ли я получить имя текущей запущенной функции в javascript? Я хочу получить имя функции от самой функции. Javascript: Cube : < profile : < edit : function()< // Get function.

Как я могу получить имя функции внутри функции в Javascript? В частности, в Dojo, поскольку это, похоже, не делает работу arguments.callee.caller

Как я могу получить имя экземпляра функции JavaScript изнутри, не зная ее имени? Причина, по которой мне это нужно, заключается в том, что я начал работать с исключениями, и я хочу получить имя.

Источник

Могу ли я получить имя текущей функции в JavaScript?

возможно ли это сделать:

У меня есть фреймворки Dojo и jQuery в моем стеке, поэтому, если любой из них облегчает работу, они доступны.

17 ответов

для неанонимных функций

но в случае обработчика ошибок результатом будет имя функции обработчика ошибок, не так ли?

Это должно сделать это:

предупреждение: 5-е издание ECMAScript (ES5) запрещает использование аргументов.callee () в строгом режиме. Избегайте использования аргументов.callee (), либо давая выражениям функции имя, либо используя объявление функции, где функция должна вызывать себя.

Как уже отмечалось, это относится только если ваш скрипт использует «строгий режим». Это в основном по соображениям безопасности, и, к сожалению, в настоящее время нет Альтернатива для этого.

Это должно пойти в категорию «самых уродливых хаков в мире», но здесь вы идете.

во-первых, печать имени настоящее функция (как и в других ответах), кажется, имеет ограниченное использование для меня, так как вы уже знаете, что такое функция!

однако, узнав имя вызов функция может быть очень полезной для функции трассировки. Это с regexp, но использование indexOf будет около 3x быстрее:

все, что вам нужно, это просто. Создать функцию:

после этого, когда вам нужно, вы просто использовать:

вот способ, который будет работать:

затем в ваших тестах:

обратите внимание, что третий тест будет работать, только если тест находится в /util / functions

другим вариантом использования может быть диспетчер событий, связанный во время выполнения:

преимущество здесь в том, что диспетчер может быть легко повторно использован и не должен получать очередь отправки в качестве аргумента, вместо этого он поставляется неявно с именем вызова.

в конце концов, общий случай, представленный здесь, будет «использовать имя функции в качестве аргумента, поэтому вам не нужно передавать его явно», и это может быть полезно во многих случаях, таких как jQuery animate() необязательный обратный вызов или в таймаутах / интервалах обратных вызовов (т. е. вы передаете только имя функции).

так как вы написали функцию с именем foo и вы знаете, что это в myfile.js почему вам нужно получить эту информацию динамически?

это, как говорится, вы можете использовать arguments.callee.toString() внутри функции (это строковое представление всей функции) и регулярное выражение значения имени функции.

вот функция, которая выплюнет свое собственное имя:

Читайте также:  Какие документы нужны чтобы поменять имя в паспорте

обновленный ответ на этот вопрос можно найти в этом ответе: https://stackoverflow.com/a/2161470/632495

и, если вам не хочется нажимать:

сочетание нескольких ответов которые я видел здесь. (Протестировано в FF, Chrome, IE11)

вызов randomFunction () предупредит строку, содержащую имя функции.

Источник

Функции

Зачастую нам надо повторять одно и то же действие во многих частях программы.

Например, необходимо красиво вывести сообщение при приветствии посетителя, при выходе посетителя с сайта, ещё где-нибудь.

Чтобы не повторять один и тот же код во многих местах, придуманы функции. Функции являются основными «строительными блоками» программы.

Объявление функции

Для создания функций мы можем использовать объявление функции.

Пример объявления функции:

Вызов showMessage() выполняет код функции. Здесь мы увидим сообщение дважды.

Этот пример явно демонстрирует одно из главных предназначений функций: избавление от дублирования кода.

Если понадобится поменять сообщение или способ его вывода – достаточно изменить его в одном месте: в функции, которая его выводит.

Локальные переменные

Переменные, объявленные внутри функции, видны только внутри этой функции.

Внешние переменные

У функции есть доступ к внешним переменным, например:

Функция обладает полным доступом к внешним переменным и может изменять их значение.

Внешняя переменная используется, только если внутри функции нет такой локальной.

Переменные, объявленные снаружи всех функций, такие как внешняя переменная userName в вышеприведённом коде – называются глобальными.

Глобальные переменные видимы для любой функции (если только их не перекрывают одноимённые локальные переменные).

Желательно сводить использование глобальных переменных к минимуму. В современном коде обычно мало или совсем нет глобальных переменных. Хотя они иногда полезны для хранения важнейших «общепроектовых» данных.

Параметры

Мы можем передать внутрь функции любую информацию, используя параметры (также называемые аргументами функции).

Параметры по умолчанию

Например, вышеупомянутая функция showMessage(from, text) может быть вызвана с одним аргументом:

Если мы хотим задать параметру text значение по умолчанию, мы должны указать его после = :

Теперь, если параметр text не указан, его значением будет «текст не добавлен»

В данном случае «текст не добавлен» это строка, но на её месте могло бы быть и более сложное выражение, которое бы вычислялось и присваивалось при отсутствии параметра. Например:

В JavaScript параметры по умолчанию вычисляются каждый раз, когда функция вызывается без соответствующего параметра.

Ранние версии JavaScript не поддерживали параметры по умолчанию. Поэтому существуют альтернативные способы, которые могут встречаться в старых скриптах.

Например, явная проверка на undefined :

…Или с помощью оператора || :

Возврат значения

Функция может вернуть результат, который будет передан в вызвавший её код.

Простейшим примером может служить функция сложения двух чисел:

Директива return может находиться в любом месте тела функции. Как только выполнение доходит до этого места, функция останавливается, и значение возвращается в вызвавший её код (присваивается переменной result выше).

Вызовов return может быть несколько, например:

Возможно использовать return и без значения. Это приведёт к немедленному выходу из функции.

Если функция не возвращает значения, это всё равно, как если бы она возвращала undefined :

Пустой return аналогичен return undefined :

Для длинного выражения в return может быть заманчиво разместить его на нескольких отдельных строках, например так:

Читайте также:  Выбрать имя для морской свинки

И тогда всё сработает, как задумано.

Выбор имени функции

Функция – это действие. Поэтому имя функции обычно является глаголом. Оно должно быть простым, точным и описывать действие функции, чтобы программист, который будет читать код, получил верное представление о том, что делает функция.

Как правило, используются глагольные префиксы, обозначающие общий характер действия, после которых следует уточнение. Обычно в командах разработчиков действуют соглашения, касающиеся значений этих префиксов.

Например, функции, начинающиеся с «show» обычно что-то показывают.

Функции, начинающиеся с…

Примеры таких имён:

Благодаря префиксам, при первом взгляде на имя функции становится понятным что делает её код, и какое значение она может возвращать.

Функция должна делать только то, что явно подразумевается её названием. И это должно быть одним действием.

Два независимых действия обычно подразумевают две функции, даже если предполагается, что они будут вызываться вместе (в этом случае мы можем создать третью функцию, которая будет их вызывать).

Несколько примеров, которые нарушают это правило:

В этих примерах использовались общепринятые смыслы префиксов. Конечно, вы в команде можете договориться о других значениях, но обычно они мало отличаются от общепринятых. В любом случае вы и ваша команда должны точно понимать, что значит префикс, что функция с ним может делать, а чего не может.

Имена функций, которые используются очень часто, иногда делают сверхкороткими.

Это исключения. В основном имена функций должны быть в меру краткими и описательными.

Функции == Комментарии

Функции должны быть короткими и делать только что-то одно. Если это что-то большое, имеет смысл разбить функцию на несколько меньших. Иногда следовать этому правилу непросто, но это определённо хорошее правило.

Небольшие функции не только облегчают тестирование и отладку – само существование таких функций выполняет роль хороших комментариев!

Первый вариант использует метку nextPrime :

Второй вариант использует дополнительную функцию isPrime(n) для проверки на простое:

Второй вариант легче для понимания, не правда ли? Вместо куска кода мы видим название действия ( isPrime ). Иногда разработчики называют такой код самодокументируемым.

Таким образом, допустимо создавать функции, даже если мы не планируем повторно использовать их. Такие функции структурируют код и делают его более понятным.

Итого

Объявление функции имеет вид:

Для того, чтобы сделать код более чистым и понятным, рекомендуется использовать локальные переменные и параметры функций, не пользоваться внешними переменными.

Функция, которая получает параметры, работает с ними и затем возвращает результат, гораздо понятнее функции, вызываемой без параметров, но изменяющей внешние переменные, что чревато побочными эффектами.

Функции являются основными строительными блоками скриптов. Мы рассмотрели лишь основы функций в JavaScript, но уже сейчас можем создавать и использовать их. Это только начало пути. Мы будем неоднократно возвращаться к функциям и изучать их всё более и более глубоко.

Задачи

Обязателен ли «else»?

В ином случае она запрашивает подтверждение через confirm и возвращает его результат:

Есть ли хоть одно отличие в поведении этого варианта?

Оба варианта функций работают одинаково, отличий нет.

Перепишите функцию, используя оператор ‘?’ или ‘||’

В ином случае она задаёт вопрос confirm и возвращает его результат.

Сделайте два варианта функции checkAge :

Источник

Оцените статью
Имя, Названия, Аббревиатуры, Сокращения
Добавить комментарий

Adblock
detector