JavaScript的深拷贝

什么是深拷贝?

拷贝时将数据中的所有引用结构都拷贝一份,使得两份数据在内存中完全独立,两者之间进行任何数据修改都不会影响彼此,那就是深拷贝

var deepCopy = function() {
    var temp = {};
    for(var k in this) {
        if(typeof this[k] === 'object') {
            temp[k] = this[k].deepCopy;//让每个对象都有deepCopy方法,它们指向的是同一个方法
        } else {
            temp[k] = this[k];
          }
    }
    return temp;
};
    var car = {
        name: "奇瑞qq"
    };
    var student = {
        name: "小陈",
        age: 18,
        sex: "男",
        car: car
    };
    //通过js对象的动态特性让每个对象都deepCopy方法,并且它们指向同一个方法体
    car.deepCopy = deepCopy;
    student.deepCopy = deepCopy;
    //让每个对象都执行deepCopy方法,如此反复就形成深拷贝
    var p = student.deepCopy();
    p.car = student.car.deepCopy();
    console.log(p.car==student.car);//false,证明两者是不同对象的引用

此代码最精髓的地方是deepCopy函数是循环引用和调用

代码流程图
这里写图片描述

从图中能看出对象p和student在内存中完全独立,两者互不相扰,唯一存在瓜葛的是我们为了实现深拷贝而自定义的函数deepCopy,但这并不影响它们在这实现了深拷贝

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值