Какие объекты JavaScript не Deep Clone по умолчанию? - PullRequest
0 голосов
/ 17 июля 2010

Существует много хабубов о "клонировании" объектов JavaScriptОднако, насколько я понимаю, это просто:

function clone(obj) {
    return obj;
}

Теперь я понимаю, что объекты DOM не клонируются таким образом, но, насколько я понимаю, DOM является частью браузера, а не частьюJavaScript.

Какие объекты требуют глубокого клонирования и почему?

Ответы [ 2 ]

4 голосов
/ 17 июля 2010

Это просто возвращает ссылку на точно такой же объект . Это не клон ничего.

x = {}, 
c=function(o){return o}, 
y = c(x), 
result = (x === y)

результат true

1 голос
/ 17 июля 2010

В некоторых отношениях это передача / назначение по ссылке, а не по значению.По ссылке, как правило, используется в большинстве языков по умолчанию для всего, что не является примитивным по ряду причин, вероятно, главными из которых являются:

1) Вероятно, вы перепрыгнете через много памяти, есликаждое назначение / передача функции создает глубокую копию.

2) Дополнительное удовольствие, когда вы пытаетесь изменить положение вещей ... не более this.x = 5, если this.x уже привязан.Вероятно, что-то вроде this = this.clone({x: 5}) вместо этого, если бы мы были везунчиками.

Для получения дополнительной информации взгляните на эти две ссылки:

http://oranlooney.com/functional-javascript/

http://oranlooney.com/deep-copy-javascript/

Я думаю, что реальный вопрос, вероятно, должен быть - почему не существует хорошего удобного метода Object, предназначенного для создания глубоких копий?

...