<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<script>
// 深拷贝:是一层一层拷贝的,每一层都会独立的去开辟一个空间
var p1 = {
name: "zs",
age: 18,
like: ["Java", "H5", "ui"],
wife: {
name: "贾玲",
age: 18
}
};
var p2 = {}; //隔壁老王
// 函数封装 deepCopy
function deepCopy(source, target) { //source数据源--从哪里拷贝,target--目标的意思,就是拷贝到哪 里去
// 遍历循环
for (var key in source) { //in是拿到了所有的属性,不管是公有的还是私有的
// console.log(key);
if (source.hasOwnProperty(key)) { //只拷贝私有的自己身上的属性,不拷贝原型上的属性
if (typeof source[key] == "object") { //表示是引用数据类型
console.log(key);
// console.log(source[key]);测试
//console.log(target[key]);测试
// 递归:自己调用自己
//target[key] = {}; //就可以解决了
target[key] = Array.isArray(source[key]) ? [] : {}; //就可以解决了
deepCopy(source[key], target[key]); //自己调用自己,我们称之为递归
} else {
// 值类型,直接拷贝,第一层拷贝过来,此时拷贝的是值类型
target[key] = source[key]; // p2[key] = p1[key];
}
}
}
}
// 调用函数
deepCopy(p1, p2);
console.log(p2);
p2.wife.name = "如花"; //娶妻子
console.log(p1);
// 我们的深拷贝就是一层一层拷贝。
</script>
</body>
</html>
深拷贝
最新推荐文章于 2025-05-03 14:09:17 发布