Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 10.08.2010, 10:05
Интересующийся
Отправить личное сообщение для Roman-NN Посмотреть профиль Найти все сообщения от Roman-NN
 
Регистрация: 01.06.2010
Сообщений: 10

Ссылки/указатели в JS
Есть ли в javascript возможность использовать ссылки/указатели (как & в php или в c++)?

Или может есть другое решение? В сущности, мне нужно создать многомерный массив с количеством уровней задаваемым в ходе выполнения программы. В ПХП реализовал бы с помощью указателей:
$p = $arr = array();
while ($condition) $p=&$p[0];

А как быть в йс?
Ответить с цитированием
  #2 (permalink)  
Старый 10.08.2010, 10:15
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

В PHP не указатели, а ссылки.

Сообщение от Roman-NN
А как быть в йс?
var obj = {};  // В obj лежит ссылка на объект
var obj2 = obj;   // obj и obj2 ссылаются на один и тот же объект
obj.foo = 'bar';
alert(obj2.foo);
Ответить с цитированием
  #3 (permalink)  
Старый 10.08.2010, 10:45
Интересующийся
Отправить личное сообщение для Roman-NN Посмотреть профиль Найти все сообщения от Roman-NN
 
Регистрация: 01.06.2010
Сообщений: 10

Большое спасибо, работает.

var p = a = {}; condition = 5;
while (condition--) p = p[0] = {}; // прячу значение поглубже
p[0] = 'Good morning';

p = a; condition = 6;
while (condition--) p = p[0]; // вывожу спрятанное значение
alert(p);


То есть, когда в операции присваивания справа стоит объект, то он всегда присваивается "по ссылке", т.е. новых объектов не создается?
А на переменную можно ссылаться только как на свойство объекта (как в строчке 3)? Специального оператора как в php нет?
Ответить с цитированием
  #4 (permalink)  
Старый 10.08.2010, 10:58
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от Roman-NN
То есть, когда в операции присваивания справа стоит объект, то он всегда присваивается "по ссылке", т.е. новых объектов не создается?
Нет, справа стоит ссылка на объект, которая присваивается по значению. В JS невозможно в переменной хранить объект, только ссылку на него.

Сообщение от Roman-NN
А на переменную можно ссылаться только как на свойство объекта (как в строчке 3)? Специального оператора как в php нет?
Это не переменная, а примитивное значение. Передавать ссылку на него смысла нет, оно не мутабельное.

Т.е.
1. Нельзя хранить объекты, можно хранить ссылки на объекты.
2. Нельзя передавать по ссылке, но передаются ссылки на объекты.
3. Ссылок на примитивные значения нет, они смысла не имеют.

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

А указатели это вообще другое.
Ответить с цитированием
  #5 (permalink)  
Старый 10.08.2010, 11:07
Интересующийся
Отправить личное сообщение для Roman-NN Посмотреть профиль Найти все сообщения от Roman-NN
 
Регистрация: 01.06.2010
Сообщений: 10

Огромное спасибо! Все более и более проясняется, благодаря вам.
А что такое указателями я видимо основательно подзабыл, раз это другое. Надо будет почитать.
В общем, спасибо!
Ответить с цитированием
  #6 (permalink)  
Старый 12.08.2010, 22:44
Интересующийся
Отправить личное сообщение для Roman-NN Посмотреть профиль Найти все сообщения от Roman-NN
 
Регистрация: 01.06.2010
Сообщений: 10

Теперь у меня обратная ситуация: можно ли как-то скопировать объект при присвоении. То есть, имеем две переменные, в которых хранятся ссылки на два разных объекта; нужно, чтобы эти два разных объекта стали одинаковыми, но остались отдельными (при изменении одного, второй оставался прежним)

var a = Object ()
var b = Object ()
a.name = 'Alan'
b.name = 'Bob'

b = a // тут надо что-то похитрее

b.name = 'Bill'
alert(a.name+' а мне надо чтобы оставался Алан')


PS: Есть мысль сделать присвоение всех свойств в цикле, но тогда будет такая же проблема со свойствами, которые сами себе объекты. Можно конечно рекурсию сделать, но может в ЙС есть уже готовое решение?

PPS: Сразу в догонку, на всякий случай - мне нужно скопировать не простой объект, а [object CSSStyleDeclaration]. Но его же можно рассматривать как простой объект в данном случае?
Ответить с цитированием
  #7 (permalink)  
Старый 12.08.2010, 22:55
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от Roman-NN
Есть мысль сделать присвоение всех свойств в цикле
Именно так.

Сообщение от Roman-NN
но может в ЙС есть уже готовое решение?
Нет.

Сообщение от Roman-NN
Но его же можно рассматривать как простой объект в данном случае?
Смотря какой у вас случай. Может поэтому и нет в JS функции для копирования объектов, случаи-то всегда разные.
Ответить с цитированием
  #8 (permalink)  
Старый 12.08.2010, 23:04
Интересующийся
Отправить личное сообщение для Roman-NN Посмотреть профиль Найти все сообщения от Roman-NN
 
Регистрация: 01.06.2010
Сообщений: 10

Сообщение от Kolyaj Посмотреть сообщение
Смотря какой у вас случай. Может поэтому и нет в JS функции для копирования объектов, случаи-то всегда разные.
Грубо говоря, случай такой:
есть две ячейки таблицы с разными стилями. Через ЙС надо сделать стиль второй точь-в-точь как у первой (сохранив возможность менять стили по отдельности).

Честно говоря, я уже несколько отчаялся - иду в лобовое копирование нужных мне css-свойств
Ответить с цитированием
  #9 (permalink)  
Старый 12.08.2010, 23:16
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

А страница-то не ваша чтоли? Такие проблемы решаются присвоением нужных CSS-классов.
Ответить с цитированием
  #10 (permalink)  
Старый 12.08.2010, 23:22
Интересующийся
Отправить личное сообщение для Roman-NN Посмотреть профиль Найти все сообщения от Roman-NN
 
Регистрация: 01.06.2010
Сообщений: 10

страница моя, но стиль в ней очень динамично меняется с помощью ЙС
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Почему это работает? (инклуд JS в JS) Василий Б. Общие вопросы Javascript 4 11.06.2010 12:41
помогите задать переменную в js bsgroupua Общие вопросы Javascript 3 01.02.2010 18:28
Вывод JS значения в одну строку в HTML velo Общие вопросы Javascript 7 15.12.2009 03:57
Html метки + div + JS boltayka Events/DOM/Window 1 07.09.2009 17:21
Самая лучшая книга по JS? ulandj Оффтопик 2 06.04.2009 11:35