Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Подскажите с масивами 
:(
    Опции темы
dnts
Дата 24.4.2011, 15:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 24.4.2011

Репутация: нет
Всего: нет



Здравствуйте, возникла следующая проблема:
есть переменная:
Код

var first_var = {name: "Имя", other: null }; //переменных естественно больше...


Я создаю массив используя функцию:
Код

function Item(iid, name) {
    this.iid = iid;
    this.name = name;
}
var arr2 = new Array();
arr2['other'] = new Array();
arr2['other']['other2'] = new Item(0, "Имя");


Возникает проблема при присвоении:
Код

first_var['other'] = arr2['other']['other2'];


Потом обращаюсь к переменной first_var['other'].name

Но проблема в том, если изменять значение first_var['other'].name, то значение arr2['other']['other2'].name также изменяется, что мне полностью не подходит.

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

Это сообщение отредактировал(а) dnts - 24.4.2011, 15:19
PM MAIL   Вверх
Amphiluke
Дата 24.4.2011, 16:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


   ☽
***


Профиль
Группа: Завсегдатай
Сообщений: 1253
Регистрация: 26.8.2009

Репутация: 35
Всего: 112



Очевидно, что путем такого присваивания
Цитата(dnts @  24.4.2011,  19:17 Найти цитируемый пост)
Код

first_var['other'] = arr2['other']['other2'];

вы копируете в first_var['other'] лишь ссылку на ранее созданный объект. Для того, чтобы получить независимую копию, вам нужно повторно вызвать конструктор
Код

first_var['other'] = new Item(arr2['other']['other2'].iid, arr2['other']['other2'].name);

PM   Вверх
dnts
Дата 24.4.2011, 16:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 24.4.2011

Репутация: нет
Всего: нет



Amphiluke , большое спасибо, помогло, хотя все таки не понял почему таким образом копируется ссылка а не объект.
PM MAIL   Вверх
bars80080
Дата 24.4.2011, 16:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 15
Всего: 315



Цитата(dnts @  24.4.2011,  16:26 Найти цитируемый пост)
почему таким образом копируется ссылка а не объект. 

потому что так записано в синтаксисе языка. простое = приводит к ссылке на объект.
это правила не действует для чисел, строковых переменных и ряда других типов переменных, что и создаёт неожиданное поведение
PM MAIL WWW   Вверх
Amphiluke
Дата 24.4.2011, 16:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


   ☽
***


Профиль
Группа: Завсегдатай
Сообщений: 1253
Регистрация: 26.8.2009

Репутация: 35
Всего: 112



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


Это сообщение отредактировал(а) Amphiluke - 24.4.2011, 16:38
PM   Вверх
dnts
Дата 24.4.2011, 16:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 24.4.2011

Репутация: нет
Всего: нет



Еще раз благодарю за совет...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1033 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.