JS基础-ES5深拷贝函数封装

[JS 编程技巧] ES5 实现深拷贝函数封装.

ES5 深拷贝函数封装实现方法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// 原始对象
const obj = {
name: "小野森森",
age: 34,
info: {
hobby: [
"travel",
"piano",
{
a: 1,
},
],
career: {
teacher: 4,
engineer: 9,
},
},
};

封装方法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
// 参数,原始对象,目标对象
function deepClone(origin, target) {
var tar = target || {};
var toStr = Object.prototype.toString;
var arrType = "[object Array]";
for (var k in origin) {
// 不能是原型上面的属性,只能是自身的属性
if (origin.hasOwnProperty(k)) {
// 引用类型
if (typeof origin[k] === "object" && origin[k] !== null) {
tar[k] = toStr.call(origin[k]) === arrType ? [] : {};
//递归执行
deepClone(origin[k], tar[k]);
} else {
// 基本数据类型
tar[k] = origin[k];
}
}
}
return tar;
}
1
2
3
4
5
const newObj = deepClone(obj, {});

newObj.info.career.engineer = 10;

console.log(obj, newObj);

控制台打印结果