![]() |
Модераторы: Sardar, Aliance |
![]() ![]() ![]() |
|
dnts |
|
||||||
Новичок Профиль Группа: Участник Сообщений: 22 Регистрация: 24.4.2011 Репутация: нет Всего: нет |
Здравствуйте, возникла следующая проблема:
есть переменная:
Я создаю массив используя функцию:
Возникает проблема при присвоении:
Потом обращаюсь к переменной first_var['other'].name Но проблема в том, если изменять значение first_var['other'].name, то значение arr2['other']['other2'].name также изменяется, что мне полностью не подходит. Прошу подскажите кто понимает, если недостаточно информации - могу выложить полный код, заранее благодарен... Это сообщение отредактировал(а) dnts - 24.4.2011, 15:19 |
||||||
|
|||||||
Amphiluke |
|
|||
![]() ☽ ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1253 Регистрация: 26.8.2009 Репутация: 35 Всего: 112 |
Очевидно, что путем такого присваивания
вы копируете в first_var['other'] лишь ссылку на ранее созданный объект. Для того, чтобы получить независимую копию, вам нужно повторно вызвать конструктор
|
|||
|
||||
dnts |
|
|||
Новичок Профиль Группа: Участник Сообщений: 22 Регистрация: 24.4.2011 Репутация: нет Всего: нет |
Amphiluke , большое спасибо, помогло, хотя все таки не понял почему таким образом копируется ссылка а не объект.
|
|||
|
||||
bars80080 |
|
|||
![]() прапор творюет ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 12022 Регистрация: 5.12.2007 Где: Königsberg Репутация: 15 Всего: 315 |
||||
|
||||
Amphiluke |
|
|||
![]() ☽ ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1253 Регистрация: 26.8.2009 Репутация: 35 Всего: 112 |
Потому что Javascript поддерживает ссылочные типы, к которым как раз и относятся объекты. Нередко экземпляры объектов занимают в памяти очень много места, и если бы не было механизма присваивания (или передачи) по ссылке, то всякая операция, вызов функции приводили бы к нерациональному расходу памяти, хотя большинство действий с объектами не требуют модификации их свойств. А уж если есть необходимость получения независимого экемпляра, извольте применить для него заново оператор new с конструктором, которые позаботятся о выделении нового участка памяти под экземпляр.
Это сообщение отредактировал(а) Amphiluke - 24.4.2011, 16:38 |
|||
|
||||
dnts |
|
|||
Новичок Профиль Группа: Участник Сообщений: 22 Регистрация: 24.4.2011 Репутация: нет Всего: нет |
Еще раз благодарю за совет...
|
|||
|
||||
![]() ![]() ![]() |
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |