美文网首页
浅克隆与深克隆

浅克隆与深克隆

作者: 搬不完的元猿员 | 来源:发表于2019-03-23 05:01 被阅读0次

什么是深克隆,什么是浅克隆?

克隆针对的是对象,数组,函数等复杂数据。

浅克隆根本上改变的是同一个对象,只是将栈内存中的引用复制一下,然后赋给一个变量,其实两个指向同一地址。而且一个改变另一个也会改变。

深克隆是创建一个全新的对象,将原对象数据复制过去,但两者之间没有联系

浅克隆

例如:

浅克隆

我们定义了一个数组a,里面有三个元素,把a赋给变量b,那么输出b的内容发现和a相同。这里创建出的数组(array)被放在堆内存中,而a,b两个引用都是在栈内存中。array包含了三个元素,a和b则仅仅是一个地址,指向了array,和C语言中的指针非常相似。这里就是一个简单的浅克隆的例子,把数组array的引用复制一份给b,让两个变量都指向array。这时候任意一个引用对array做出的修改都会影响到另一个引用上。

递归完成深克隆

例如:

深克隆第一部分

首先判断元素是否是object,然后创建一个对象赋给result。然后遍历arr中所有的元素,递归判断是否是深层对象,不是返回赋给result。这样就实现了深克隆。下面测试一下:

深克隆第二部分

输出结果:

可以看到在对原数组操作时,克隆返回的数组内容不会改变。两个数组是完全不同的两个对象,在堆内存中各占一块,没有关联。

总结

所谓深克隆就是创造一个完全一样的对象,将原对象的所有元素拷贝过来即可。

浅克隆就是复制一份引用,所有引用指向同一份数据。

更多前端内容请 点击关注 

相关文章

网友评论

      本文标题:浅克隆与深克隆

      本文链接:https://www.haomeiwen.com/subject/ekdevqtx.html