企业面试真题--019

使用原生JS实现如下代码:var obj =$.extend(true, obj1, obj2);

//首先需要了解$.extend(true, obj1, obj2)这个方法的作用
//第一个参数:true, 表示在合并对象时, 进行深拷贝, 默认为浅拷贝
//最终将obj合并到target对象上去
function extend(deep, target, obj){
    if(typeof deep == "boolean" && deep===true){
        for(var attr in obj){
            //若均为对象, 则递归调用, 进行深克隆
            if( typeof target[attr] === "object" && typeof obj[attr] === "object") {
                 extend(true, target[attr], obj[attr]);
            } 
            //若obj[attr]为对象, 而target[attr]不是对象,或不存在
            else if(typeof obj[attr] === "object"){
                 //克隆obj[attr]副本, 赋值给target[attr]
                 if(obj[attr] instanceof Array){
                     target[attr] = extend(true, [], obj[attr]);                 
                 } else {
                     target[attr] = extend(true, {}, obj[attr]);
                 }
            }
            //若obj[attr]为普通数据类型(无论target[attr]]什么类型), 直接覆盖
            else {
                 target[attr] = obj[attr];
            }
        }        
    } 
    //若deep参数为false, 直接浅克隆
    if(typeof deep == "boolean" && deep===false){
        for(var attr in obj){
            target[attr] = obj[attr];
        }
    } 
    return target; //为处理方便, 返回target对象
}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值