$.extend(true,o,d)与$.extend(o,d) 的区别


对extend 浅拷贝进行简化
var extend = function (obj,newObj) {
        for(var key in newObj){
            obj[key] = newObj[key];
        }
        return obj;
    }
//从对象的角度测试 
var obj = {
    a:1,
    b:2,
    c:{
        d:3
    }
};
var newObj = {


};
console.log(extend(newObj,obj));
//对 newObj.a = 3;进行赋值
//打印 obj.a 得到1
//打印 newObj.a 得到3     这说明obj.a 与 newObj.a 不存在引用关系 拷贝成功
//在深一层
//对 newObj.c.d = 5;进行赋值
//打印 obj.c.d 得到5
//打印 newObj.c.d 得到5     这说明obj.c.d 与 newObj.c.d 存在引用关系 拷贝失败 在深一层就不行了 所以为浅拷贝


//从数组的角度测试

var obj = {
        a:1,
        b:2,
        c:[1,2,3]
    };
    var newObj = {
        c:[3]
    };
    console.log(extend(newObj,obj));

//打印 newObj.c 得到 [1,2,3] 

//给newObj.c[0]  = 2;赋值

//打印obj.c[0] 得到 2  综上证明 obj.c 与 newObj.c存在引用关系  这也证明了浅拷贝






对extend shen拷贝进行简化
var extend = function (obj,newObj) {
        for(var key in newObj){
            if(Object.prototype.toString.call(newObj[key]) == '[object Array]' || Object.prototype.toString.call(newObj[key]) == '[object Object]'){
                extend(obj[key],newObj[key])
            }else{
                obj[key] = newObj[key];
            }
        }
        return obj;
    }
//从对象的角度测试 
    var obj = {
        a:1,
        b:2,
        c:{
            d:5
        }
    };
    var newObj = {
        c:{
            d:6
        }
    };
    console.log(extend(newObj,obj));
//对 newObj.a = 3;进行赋值
//打印 obj.a 得到1
//打印 newObj.a 得到3     这说明obj.a 与 newObj.a 不存在引用关系 拷贝成功
//在深一层
//对 newObj.c.d = 7;进行赋值
//打印 obj.c.d 得到5
//打印 newObj.c.d 得到7     这说明obj.c.d 与 newObj.c.d 不存在引用关系 拷贝成功 故证明深拷贝


//从数组的角度测试

var obj = {
        a:1,
        b:2,
        c:[3]
    };
    var newObj = {
        c:[1,2,3]
    };

    console.log(extend(newObj,obj));

//打印 newObj.c 得到 [1,2,3] 

//给newObj.c[0]  = 2;赋值

//打印obj.c[0] 得到 3 综上证明 obj.c 与 newObj.c 不存在引用关系  这也证明了深拷贝













评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值