深拷贝

<!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>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值