Скопирвоать объект не по ссылке

Кощей

if(!$needle) die("ooh");
Скопирвоать объект не по ссылке

Как правильно сделать копию, чтобы изменяя её, изменений в исходном объекте не происходило ?

Эй, деж вы гуру, как этот масив скопировать можно. Через = совсем не то что нужно копирует.

С масивом есть одна штука через slice она работает, но всёже я хочу и другие объекты копировать. КАК ???
 

dimagolov

Новичок
Кощей, клонирование объектов в JS в общем случае не решаемая задача. Ограничь универсальность копирования - что именно ты будешь копировать - свойства которые простые типы (потому как только начинаются объекты заходим в рекурсию), методы, или еще что.

п.с. просто в JS есть такая штука как прототип, который можно менять когда угодно так же как и любые свойства и методы конкретного объекта.
 

dimagolov

Новичок
BRat, ты не совсем прав. за клонирование в JS беруться все кому не лень, а вопрос отнюдь не тривиальный. но проблема в том, что понимание нетривиальности приходит с глубоким пониманием прототипного механизма JS, а этого понимания нету у 99% тех, кто пишет код на JS. тут такая загогулина вышла - JS язык для домохозяек и кто попало на нем может писать, но в нем есть очень мощный и далеко не простой для понимания механизм прототипов. вот когда ты начинаешь его трогать, так сразу JS из языка для домохозяек превращается в язык для гуру, причем резким скачком.

-~{}~ 14.06.08 15:51:

рекомендую:
http://forum.woweb.ru/wo.html?act=Search&CODE=show&searchid=9201de4c3189ab30c606212af9ef0299&search_in=posts&result_type=topics&highlite=%EA%EB%EE%ED%E8%F0%EE%E2%E0%ED%E8%E5 - тут простенько я расказал то же, что и в первом посте
http://forum.dklab.ru/search.html?nospam=GEN_BY_JS&search_forum=28&q=%EA%EB%EE%ED%E8%F0%EE%E2%E0%ED%E8%E5 - тут много по этой тематике, многое на уровне JS-гуру
 

BRat

o_0
dimagolov
опиши поконкретней, в каких случаях могут возникнуть проблемы при копировании?
 

dimagolov

Новичок
BRat, ты что такое прототип знаешь?
вот тебе простейший вопрос. Мы клонируем объект. у него есть прототип. Если мы создадим клон через прототип оригинального объекта, а потом поменяем прототип, то поменяются и клон тоже (может это и устраивает, но не всегда). чтобы этого не было, надо создавать прототип по-новому, но он тоже суть объект, то есть пришли к начальной задаче.
в какой момент надо разрывать цепь прототипов?
почему? :) :) :)

-~{}~ 14.06.08 15:58:

даже проще. вот у нас есть объект, а у него есть свойство тоже объект. нам как, клонировать его рекурсивно? а если это элемент DOM?
 

BRat

o_0
dimagolov
"устраивает, но не всегда"
Вот это интересует, когда может не устраивать? В целом суть проблемы я понял
 

dimagolov

Новичок
"когда может не устраивать" целиком зависит во-первых от объектной модели приложения и грубины использования прототипного механизма, а во-вторых от целей клонирования. вообще, по моему субъективному мнению, необходимость клонирования объектов это признак плохой архитектуры приложения. так как если объект отображает некую сущность, причем она скорее всего из реального мира, то в реальном мире клонировать ничего нельзя, а значит и логики в клонировании объекта тоже нету.
задачи класса обработки изменения БД (типа есть отображение БД в web-морде, какие-то объекты JS контролирующие логику интефейса, мы что-то делаем чтобы поменять состояние БД и потом отправляем это на back-end, по результату надо или откатиться назад или подтвердить изменения) решаются просто массивами строк, которые проще всего и прямее всего отображают плоские таблицы БД, а вот их копирование проблем не составляет.
 

crocodile2u

http://vbolshov.org.ru
rotoZOOM
Слышал звон, да не знаешь, где он... Посмотри хоть на название форума, что ли...
 

rotoZOOM

ACM maniac
crocodile2u Смотрю и что? Где у автора топика написано, что это вопрос по жабаскрипту? Где в названии форума написано, что здесь вопросы только по жабаскрипту? Читай название внимательно сам, потом других тыкай носом.
 

crocodile2u

http://vbolshov.org.ru
rotoZOOM
Не бузи, ты не прав. Бессмысленный спор давай прекратим или если есть желание - в личку.
 

-SkyNet-

Новичок
dimagolov
если элемент DOM, очень удобно использовать http://docs.jquery.com/Manipulation/clone

можно клонировать как раз с прилагающимися обработчиками событий, навешанных в процессе сценария

вместе со вложенными объектами и их прочим,- это решено уже на уровне ядра бибиотеки

очень удобно
 

dimagolov

Новичок
-SkyNet-, причем здесь удобно или нет? задача то была не в том, чтобы склонировать визуальный объект. очень может быть, что как раз его клонировать и не нужно. но ответ на этот вопрос (нужно/не нужно) зависит от логики приложения, и никакая универсальная библиотека не может знать на него ответ.
 

-SkyNet-

Новичок
dimagolov
почему же, в сети валяется множество реализации класс-ориентированного программирования на JS, там же есть и методы clone, копирующие все instance'ы данного экземпляра

и необязательно в универсальных библиотеках

кстати, зачастую JS именно привязывается к DOM, - уже готовая иерархия, удобно использовать

имхо, от удобства использования сильно зависит конечная сложность приложения, к которому разработчик сможе прийти без особых умственных перенапряжений, а значит и эффективность языка/либы =)
 

dimagolov

Новичок
-SkyNet-, тема в том, что любые таки либы накладывают весьма жесткие ограничения на использование объектов. то есть как вгружаешься в нечто подобное, то это можно пользовать только так, как предполагает либа, шаг влево, шаг вправо - крах системы. то есть любой метод клонирования это ограничения на средства языка, которые можно к оригиналу и клону применять.

п.с. а класс-ориентированные либы писались для тех, кто не смог понять прототипы
 

-SkyNet-

Новичок
dimagolov
согласен

имхо прототипирование не настолько заоблачно для понимания
 
Сверху