浅克隆
1 | var obj = { |
浅克隆的原始值属性更改,另一个对象不受影响。但是引用值属性一改就全都改了。
为了避免这个问题就需要进行深度克隆
深克隆
- 判断克隆对象,若为原始值(值类型)和null,直接返回
- 判断克隆对象是对象类型还是数组类型,分别
result={}
和result=[]
- 遍历克隆对象,
obj.hasOwnProperty(key)
判断是非原型属性的,进行递归克隆 - 返回结果result
1 | function deepClone(obj) { |
1 | // 测试用例 |
JSON深克隆
还可以使用 JSON 来实现深度克隆:
1 | var objStr = JSON.stringify(obj); |
但是json克隆无法克隆方法。