默认情况下哪些JavaScript对象不进行深度克隆?

时间:2010-07-17 01:49:20

标签: javascript clone

有很多关于“克隆”JavaScript对象的hubub。但是,据我所知,这很简单:

function clone(obj) {
    return obj;
}

现在我意识到DOM对象没有以这种方式克隆,但据我所知,DOM是浏览器的一部分,而不是JavaScript的一部分。

哪些对象需要深度克隆?为什么?

2 个答案:

答案 0 :(得分:4)

只会将引用返回到完全相同的对象。它没有克隆任何东西。

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

结果为true

答案 1 :(得分:1)

这在某些方面是通过参考传递/通过价值辩论进行分配。对于任何由于多种原因而不是原始语言的东西,通过引用往往是大多数语言的默认值,其中可能主要包括:

1)如果每个赋值/传递给函数创建一个深层副本,你可能会流失大量内存。

2)当你尝试改变事物的状态时会有额外的乐趣......如果this.x = 5已被绑定,则不再有this.x。如果我们半幸运的话,可能会像this = this.clone({x: 5})那样。

有关更多背景信息,请查看以下两个链接:

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

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

我认为真正的问题应该是 - 为什么没有一个方便的Object方法来做深拷贝?