<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>deepCopy</title>
</head>
<body>
<script>
var obj = {
id: 1,
name: "贺贺呀",
msg: {
age: 18,
other: {
time: 01,
},
},
};
var o = {};
// 浅拷贝只是拷贝一层,更深层次对象级别的只拷贝引用(地址)
// 封装函数 利用了递归的思想
function deepCopy(newObj, oldObj) {
for (var k in oldObj) {
// 判断我们的属性值属于哪种数据类型
// 1. 获取属性值 oldObj[k]
// var item = oldObj[k];
// 这里要先判断数组再判断对象,因为数组也是对象,如果先判断对象就会把数组的判断覆盖了
if (oldObj[k] instanceof Array) {
// 2. 判断这个值是否是数组
newObj[k] = [];
deepCopy(newObj[k], oldObj[k]);
} else if (oldObj[k] instanceof Object) {
// 3. 判断这个值是否是对象
newObj[k] = {};
deepCopy(newObj[k], oldObj[k]);
} else {
// 4. 属于简单数据类型
newObj[k] = oldObj[k];
}
}
}
deepCopy(o, obj);
console.log(o);
o.msg.other.time = 22;
console.log(obj);
</script>
</body>
</html>