实现一个深拷贝

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
/**
* 获取数据类型的函数
*/
function type (data) {
return Object.prototype.toString.call(data).slice(8, -1).toLowerCase()
}

function clone(source) {
const t = type(source)
if (t !== 'object' && t !== 'array') {
return source
}
let target;
// 如果参数是一个Object类型
if (t === 'object') {
target = {}
// 对象的遍历方法
for (let i in source) {
if (source.hasOwnProperty(i)) {
target[i] = clone(source[i])
}
}
} else {
target = []
// 数组的遍历方法
for (let i = 0; i < source.length; i++) {
target[i] = clone(source[i])
}
}
return target
}