Разрыв связи с обьектом

 
0
 
JavaScript
ava
neoks | 19.02.2013, 18:08
Есть переменная обьект которая постоянно обновляется, я пытаюсь выдернуть позицию по нажатии кнопки и присвоить другой переменной, но тут беда получается так как получается не копия а ссылка.

Вот пример


var obj1 = {position:[56,76]};
var obj2 = {position: [67,34]};

for(){
    //тут постоянно происходит цикл например перемещение первого обьекта и записывает позицию для obj1
}

//тут функция нажатии на клаву где мне нужно свистнуть позицию obj1 на данный момент

obj2.position = obj1.position


В результате obj2 имеет ссылку на obj1 и по мере обновления позиции obj1obj2 следует по такому же пути что и obj1 , как получить копию позиции а не ссылку ? )
Ответы (7)
ava
Aliance | 19.02.2013, 17:30 #
Все объекты в JS передаются по ссылке, это нормально. Для клонирования объектов можно использовать функцию jQuery.extend или воспользоваться гуглом для поиска аналога на нативном языке.
ava
Amphiluke | 19.02.2013, 17:57 #

obj2.position = obj1.position.slice(0);
ava
neoks | 19.02.2013, 18:46 #
Воспользовался, вроде как норм ))

JSON.parse(JSON.stringify(obj))
ava
Amphiluke | 19.02.2013, 18:51 #
Цитата (Aliance @  19.2.2013,  21:30 findReferencedText)
или воспользоваться гуглом для поиска аналога на нативном языке.

Кстати, а разве есть в нативном ECMAScript соответствующий метод клонирования? Я думаю, если б был, jQuery первым делом проверяла бы его доступность (для повышения производительности), однако в исходниках никаких таких проверок нет.

Добавлено позднее:
Цитата (neoks @  19.2.2013,  22:46 findReferencedText)
Воспользовался, вроде как норм

Поддержка старых IE для вас, вижу, не стоит как задача =)
ava
neoks | 19.02.2013, 19:05 #
Цитата (Amphiluke @  19.2.2013,  18:51 findReferencedText)
Поддержка старых IE

Разумеется нет )), особенно старых, не знаю когда он уже вообще умрет  smile 
ava
Amphiluke | 19.02.2013, 19:10 #
Цитата (neoks @  19.2.2013,  23:05 findReferencedText)
Разумеется нет

В таком случае для вашей задачи способ с JSON вполне хорош. Но для общего случая клонирования объектов не годится (теряются методы и другие не сериализуемые свойства).
ava
Aliance | 20.02.2013, 10:15 #
Цитата (Amphiluke @  19.2.2013,  19:51 findReferencedText)
Кстати, а разве есть в нативном ECMAScript соответствующий метод клонирования?

нет, но их можно реализовать.
Зарегистрируйтесь или войдите, чтобы написать.
Фирма дня
Вы также можете добавить свою фирму в каталог IT-фирм, и публиковать статьи, новости, вакансии и другую информацию от имени фирмы.
Подробнее
Участники
advanced
Отправить