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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Копия объекта 
V
    Опции темы
JAYBE
Дата 26.6.2012, 18:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Добрый день.
Собственно сабж в теме.
Как сделать? 
есть объект <а> и <b>.
Надо чтобы было а.b = <полная копия объекта <b>> 
PM   Вверх
Aliance
Дата 27.6.2012, 09:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

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



Проще всего использовать функцию jQuery extend:
Код

var copiedObject = {};
jQuery.extend(copiedObject, originalObject);


Добавлено через 1 минуту и 19 секунд
Найти другие способы можно, например, здесь.
PM MAIL WWW ICQ Skype   Вверх
ksnk
Дата 27.6.2012, 09:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

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



JAYBE, в Javascript объекты передаются по ссылкам, так что чтобы получить новый объект, нужно создать объект и скопировать туда все поля. Если поля тоже нужно копировать - поможет рекурсия, если объект отнаследован откуда-то, нужно переносить ссылку прототипа и проверять свойства с помощью hasOwnProperty и так далее... Насколько сложные объекты нужно будет копировать? Насколько полную копию нужно получать?

в простейшем варианте 
Код

function clone(obj) {
  var result={}; 
  for (var i in obj) {
    result[i] =obj[i];
  }
  return result;
}

Еще забавный вариант получается при использовании JSON

Код

function clone(obj) {
  return JSON.parse(JSON.srtingyfy(obj)); 
}



--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
JAYBE
Дата 27.6.2012, 14:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Спасибо =)

Теперь возникла проблема, которую никак не могу решить.
Подключил билиотеку jquery.json-2.3.min.js.
Использую функцию <$.toJSON> и вот что получаю.
>> $.toJSON(theData) 
"Недостаточно места в стеке" 

Примечательно, что если в theData менее двух дочерних обхектов, то функция работает. Стоит добавить ещё один - всё ломается.

Как с этим быть?
PM   Вверх
ksnk
Дата 27.6.2012, 14:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

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



Объекты ссылаются друг на друга?

Добавлено через 3 минуты и 20 секунд
Откуда берутся объекты? Не со странички, случайно?


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
JAYBE
Дата 27.6.2012, 15:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Со сотрницы. Походу работы с ней они добавляются в объект theData;
А при окончании мне надо "оставить его", что я и делаю этой функцией.
Код

>> $.toJSON(theData) 
"{"FRAME_37":{"functions":[],"toShowNext":[],"selectionSen":[],"textVersion":[],"current":-1,"bubbles":[]}}" 
>> $.toJSON(theData) 
"{"FRAME_37":{"functions":[],"toShowNext":[],"selectionSen":[],"current":0,"bubbles":[],"passed":"notvis"},"FRAME_7":{"functions":[],"toShowNext":[],"selectionSen":[],"textVersion":[],"current":-1,"bubbles":[]}}" 
>> $.toJSON(theData) 
"Недостаточно места в стеке" 

PM   Вверх
JAYBE
Дата 27.6.2012, 17:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Когда так делаю: JSON.srtingyfy(theData) - тоже про стек пишет...

PM   Вверх
Aliance
Дата 28.6.2012, 09:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

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



Вот здесь в секции "An object copy function" есть один из примеров реализации (но ограничение IE >= 9).
PM MAIL WWW ICQ Skype   Вверх
ksnk
Дата 28.6.2012, 10:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

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



Aliance, я опасаюсь, что это навороченный пример точно также гикнется при циклических ссылках ;)


JAYBE, А что там вообще делается-то ? Откуда появляются данные, почему они пропадают? Зачем вообще делать копию?


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
JAYBE
Дата 17.7.2012, 11:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Есть данные, которые считываются  из файла - сам js объект, который подключается отдельным файлов. Вот необходимо чтобы можно было изменять этот объект и записывать в файл.
Ну я решил это.
Сократил через наслдеование: сделал прототипыне функции. Теперь всё окей.

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


 




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


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

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