点击右上方红色按钮关注“小郑搞码事”,每天都能学到知识,搞懂一个问题!
本文目的在于分享几段代码。
一些关于对象深拷贝的事情。先是代码实现,后是方法处理。
关于对象的拷贝,如果直接对对象进行拷贝,由于其是引用类型值,因此,会进行浅拷贝。实现思路是逐项对对象的属性进行拷贝,由于对象的属性值是基本类型值,因此,逐项对对象的属性进行拷贝,可以实现对象的深拷贝。
1. 对象的深拷贝代码实现
先来看一段继承的代码。
上面代码,使用prototype属性实现了两个类的继承。也就是Test上的属性就是ChilrTest原型属性。
接着用一个forin语句,将所有的属性打印出来。这里包括:name,age,run,sing。
如果不希望打印出继承而来的属性值,可以使用下面这段代码。用hasOwnProperty加个判断。
这样,打印出来的属性就不包括继承而来的属性。包括:name,age, sing。
对象的深拷贝代码也就简单了,如下:
可以看出,拷贝后的对象cloneObject和源例是完全独立的。
2. 利用JSON的parse/stringify方法
利用JSON的parse/stringify序列方法来处理对象的深拷贝问题是比较简单的一种方式。如下代码所示。
拷贝后的对象target和源对象source是完全独立的。
总结一下:
到目前为止,我简单分享过了数组和对象的深拷贝问题。这些都是假设数据类型是单一的数组/纯对象的前提下。实际情况下,它可能的类型有Boolean,Number......。这就需要我们自己去写一个复制的方法。