zl程序教程

您现在的位置是:首页 >  其他

当前栏目

企业面试真题--019

企业面试 -- 真题 019
2023-09-14 09:02:35 时间

使用原生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对象
}