Форум программистов, компьютерный форум, киберфорум
JavaScript для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978

Получить в функции имя перменной

11.02.2020, 21:14. Показов 1963. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Можно ли получить в функции имя переменной, с которой произошло обращение к функции?
Поясню на примере
JavaScript
1
2
3
4
5
6
let ident = 5;
foo(ident);
....
function foo(x) {
   // тут надо получить строку "ident=5"
}
Понимаю, что вряд ли. Ну а вдруг?
Зачем мне это нужно? Надоело писать
JavaScript
1
alert("ident="+ident+" over="+over);
да еще при этом сажать ошибки.
Может быть есть какой-то другой способ?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
11.02.2020, 21:14
Ответы с готовыми решениями:

Создание объекта класса, если его имя находится в строковой перменной.
Как создать объект класса, если его имя находится в строковой перменной, скажем, было считано из файла?

Получить имя функции в блоке catch
Внутри метода находится блок try-catch. Как получить при исключении имя метода ?

Получить имя библиотеки/функции по её адресу
С помощью несложного кода получаю строку вида case CREATE_THREAD_DEBUG_EVENT: tcout << TEXT(" dwThreadId: ") <<...

6
Эксперт JS
6497 / 3908 / 2006
Регистрация: 14.06.2018
Сообщений: 6,781
11.02.2020, 22:14
На SO придумали только костылик для возможности переименования переменной.
В строке не хардкодим имя, а подставляем его как результат функции.
JavaScript
1
2
3
4
5
function nameof (obj) {
  return Object.keys(obj)[0];
}
// And this is how I use it to get the name of the variable/object plus the object's content/the variable's value:
const s = `${nameof({myVariable})}:${JSON.stringify(myVariable)}`;
2
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
11.02.2020, 22:55  [ТС]
Лучший ответ Сообщение было отмечено amr-now как решение

Решение

Вот такая забавная штука получилась.
JavaScript
1
2
3
4
5
6
7
8
9
10
  z = 5;
  alert("z="+window['z']);
   // отсюда
  ident = 7;  // Становится свойством объекта window
  foo('ident');
  ....
function foo(x) {
  var s = x + "=" + window[x];
  alert(s);
}
Только для глобальных, без let и var.
Не совсем то, что хотелось, конечно....
1
Эксперт JS
6497 / 3908 / 2006
Регистрация: 14.06.2018
Сообщений: 6,781
12.02.2020, 05:32
Лучший ответ Сообщение было отмечено amr-now как решение

Решение

Совместными усилиями для обычных глобальных переменных (в NodeJS тоже работает):
PHP/HTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
</head>
<body>
    <script>
        function nameof(obj) {
            return Object.keys(obj)[0];
        }
        function value(name) {
            return new Function("return " + name)();
        }
 
        let ident = 7;
        foo(nameof({ ident }));
 
        function foo(x) {
            let s = x + "=" + value(x);
            alert(s);
        }
    </script>
</body>
</html>
2
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
12.02.2020, 11:40  [ТС]
Развивая тему и продолжая изучение возможностей JS...
Пришел в дурную голову такой трюк
JavaScript
1
2
3
4
V = new Object; // Глобальный
  // Теперь все, что может представить интерес для анализа, объявляем так
V.ident = 7;
 // И аналогично посту 3 можем получать одним махом и имена, и значения
Вопрос. Насколько трюки такого рода утяжеляют программу? В смысле быстродействия и памяти
1
Эксперт JS
6497 / 3908 / 2006
Регистрация: 14.06.2018
Сообщений: 6,781
12.02.2020, 12:24
Цитата Сообщение от Байт Посмотреть сообщение
Насколько трюки такого рода утяжеляют программу? В смысле быстродействия и памяти
Копейки. Тут даже действий почти нет.

Добавлено через 37 минут
Байт, помимо приколов рекомендую поизучать и более серьезные вещи:
https://metanit.com/web/typescript/
http://typescript-lang.ru/docs/index.html
"Читал пейджер отца. Много думал." (С)
Заодно и станет понятно, как паттерны проектирования применить к JavaScript. И Фаулера, и всякие SOLID...
1
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
12.02.2020, 15:06  [ТС]
Цитата Сообщение от amr-now Посмотреть сообщение
рекомендую поизучать и более серьезные вещи:
Большое спасибо! Заинтриговало с первых слов.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
12.02.2020, 15:06
Помогаю со студенческими работами здесь

Получить имя пользователя с помощью функции GetUserName
Получить Імя юзера с помащю функції GetUserName

Как в билдере получить с сервера (MySQL 5.1, имя базы "skola", имя table "info") имя столбцов и имя строк
Доброва времены суток Как в билдере получить с сервера (MySQL 5.1, имя базы &quot;skola&quot;, имя table &quot;info&quot;) имя столбцов и...

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

Получить имя моего процесса (получить имя меня)
Работает мой код. Мне нужно получить имя моего процесса - ***.exe

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru