Форум программистов, компьютерный форум, киберфорум
JavaScript для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.79/29: Рейтинг темы: голосов - 29, средняя оценка - 4.79
5 / 5 / 0
Регистрация: 03.10.2014
Сообщений: 307
1

JS ссылка (указатель) на переменную

16.02.2021, 11:40. Показов 5951. Ответов 5
Метки js (Все метки)

Author24 — интернет-сервис помощи студентам
Всем привет!

Подскажите пожалуйста, есть ли в JS способ сделать ссылку на переменную такого вида:

HTML5
1
<div id="qqq"></div>
Javascript
1
2
3
4
5
6
7
  var q1 = $container.querySelector('#qqq');
  q1.a = 1;
  var q2 = &q1.a; // где "&" - указание, что это ссылка на qqq1.a (собственно это и есть мой вопрос)
  q2 = 2; // Должно присваивать "2" q1.a
 
  alert("q1: " + q1.a); // q1: 2
  alert("q2: " + q2);    // q2: 2
Цель всего этого чисто утилитарная: есть куча переменных вида qqq.x, qqq.y .... и т.д.
они фигурируют в сложных математических формулах, если везде писать (qqq.x + qqq.y) - получаются нечитаемый громоздкий код, возникла идея вначале функции сделать присвоения:
Javascript
1
2
3
x = &qqq.x;
y = &qqq.y;
....
"Математика" действительно сложная, формулы зубодробительные и перед каждой переменной ставить префикс "qqq." очень неудобно...
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.02.2021, 11:40
Ответы с готовыми решениями:

Указатель или ссылка на указатель. В чем разница?
Есть вопрос про указатели и ссылки на указатели :scratch: Хочу в функциях f1() и в f2()...

Ссылка на указатель на указатель
void TEST( int **&amp;refptr, int const &amp;N); int main() { int const N = 10; int i{ 0 }, b{ 2 },...

Ссылка на указатель
Привет всем, пишу класс реализующий стек, объявил вершину стека как приватный элемент. Написал...

Ссылка на указатель
Задам, скорее всего, глупый вопрос, однако хотелось бы разобраться. // ... { int *ptr =...

5
the hardway first
Эксперт JS
2461 / 1836 / 906
Регистрация: 05.06.2015
Сообщений: 3,603
16.02.2021, 12:05 2
Лучший ответ Сообщение было отмечено amr-now как решение

Решение

Нет. Примитивы передаются только по значению.
1
Модератор
Эксперт JS
6279 / 3518 / 1050
Регистрация: 07.09.2019
Сообщений: 5,664
Записей в блоге: 1
16.02.2021, 12:22 3
denismix, предлагаю сделать так:
Javascript
1
2
3
4
5
const qqq = { x: 0 }; // для примера
function a(value) {
  qqq.x = value;
}
a(6);
0
8 / 8 / 0
Регистрация: 15.02.2021
Сообщений: 20
16.02.2021, 13:27 4
denismix,

В javascript ссылки на объекты автоматически создаются с помощью присваивания
на простые типы данных ссылки делать нельзя, но можно простой тип данных положить в объект

Javascript
1
2
let o = {x: 1} // например integer в объекте
let o1 = o // такое присваивание создаст ссылку
точнее теперь обе переменные ссылаются на один объект где-то в памяти, и объект будет удален из памяти когда на него закончатся ссылки

Javascript
1
2
3
o1.x = 2 // такое присваивание изменит свойство и в объекте "o" т.е. "o.x" тоже станет 2
o = 2// тут просто для теста я демонстрирую написанное выше, мы переписали переменную "o", и теперь у нас ссылка на объект только в "o1"
console.log(o1) //{ x: 2 }
теперь про динамические свойства объекта и символы

Javascript
1
2
3
4
let x = Symbol()
o1[x] = 3 // тут мы не переписали свойство o"x" оно по прежнему 2
console.log(o1.x) //2
console.log(o1[x])//3
разница в способе обращения, символы используются чтобы случайно не перезаписать свойство установленное разработчиком

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

Javascript
1
2
3
let o = {x:1}
let o1 = {}
o1.x = o // все, ссылка готова o1.x ссылается на o
0
5 / 5 / 0
Регистрация: 03.10.2014
Сообщений: 307
16.02.2021, 16:20  [ТС] 5
Спасибо большое за объяснения!

Но, к сожалению, это не решает мою проблему, мне нужен был удобный короткий формат записи, а все приведенные способы так или иначе требуют использование префиксов или функций.
0
Эксперт JS
6492 / 3903 / 2005
Регистрация: 14.06.2018
Сообщений: 6,781
23.02.2021, 12:45 6
denismix, есть ещё странный способ деструктурирующего присвоения.
Теоретически, если источник подогнать под переменные, то можно как-то вытащить переменные:
PHP/HTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
</head>
<body>
    <div id="qqq" data-x="1" data-y="2" data-z="3"></div>
    <script>
        let obj = document.getElementById("qqq").dataset;
        let [ x, y, z ] = Object.values(obj).map(e => +e);
        console.log(x, y, z);
        let result = x + y + z;
        console.log(result);
    </script>
</body>
</html>
В let [ x, y, z ] = Object.values(obj).map(e => +e); есть тонкость - как только ошибёмся в названии переменной, данные попадут в переменную неправильно.

Добавлено через 1 минуту
Справка: https://developer.mozilla.org/... assignment
1
23.02.2021, 12:45
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.02.2021, 12:45
Помогаю со студенческими работами здесь

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

Указатель == ссылка?
Добрый день. При реализации л/р нельзя использовать указатели вообще. Если я буду использовать...

Указатель и ссылка
Помогите понять, немного запутался. #include&lt;iostream&gt; using namespace std; void ch1 (int...

Указатель и ссылка
Почему выгодней использовать указатель а не ссылку при использовании массивов?

Ссылка на указатель
Почему не работает такая конструкция? void SwapInt(void* p1, void* p2) { int* &amp;...

Указатель и ссылка
В общем вопрос достаточно простой, в чём разница указателя и сылки? С одной стороны указатель это...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru