js的深浅拷贝理解

深拷贝:
如果拷贝的时候,将当前对象的数据的引用结构都拷贝一份,即深拷贝,数据在内存中独立存在。

浅拷贝:
若拷贝的时候,只针对当前对象的属性地址的拷贝,即浅拷贝。

在这里插入图片描述

var car = {name:'法拉利'};
    var p = {name:'张三',age:28,car:car};

// 并不是拷贝,并没有对p对象有任何拷贝行为
    var pCopy=p;

// 浅拷贝的代码实现
    var pCopy = {};
    pCopy.name= p.name;
    pCopy.age= p.age;
    pCopy.car= p.car;

//深拷贝的代码实现
    var pCopy = {};
    pCopy.name= p.name;
    pCopy.age= p.age;
    pCopy.car= {};
    pCopy.car.name = car.name;


//浅拷贝的实现
    var car = { name: "奔驰"};
    var p = {
        name: "张三",
        age: 27,
        car: car,
        copy: function () {
//             创建对象
             var temp = {};
//             复制属性,在copy中使用this表示当前对象
             for(var k in this ) {
                 temp[k] = this[k];
             }
//             返回新对象
             return temp;
            }
    };

    var p1 = p.copy();
    for(var k in p1){
        console.log(k+'-->'+p1[k]);
    }


//深拷贝的实现
var p = {
     name: "张三",
     age: 27,
     car: car,
     deepCopy: function () {
//     创建对象
         var temp = {};
//     复制属性,判断属性是否为引用类型
         for (var k in this){
             if(typeof this[k] === 'object'){
                 temp[k] = this[k].deepCopy();
             }else {
                 temp[k] = this[k];
             }
          }
         return temp;
        }
    };

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值