深拷贝

/**
 * 深拷贝
 * @param {Object} obj 要拷贝的对象
 */
function deepClone(obj ={}){
    if(typeof obj !== 'object'|| obj == null){
        //obj不是对象或者是null,直接返回
        return obj
    }

    //初始化返回结果
    let result
    if(obj instanceof Array){
        result = []  //数组
    }else{
        result = {}  //对象
    }
    
    for(let key in obj){
        //保证key不是原型的属性
        if(obj.hasOwnProperty(key)){
            //递归调用
            result[key] = deepClone(obj[key])
        }
    }
    return result
}
const obj1 = {
    age : 20,
    name : 'xxx',
    address : {
        city : 'beijing'
    },
    arr:['a','b','c']
}

const obj2 = deepClone(obj1)
obj2.address.city ='shanghai'
console.log('obj1.address.city:' + obj1.address.city)
console.log('obj2' + JSON.stringify(obj2))

运行结果:

 

posted @ 2019-11-27 09:35  我没有领悟  阅读(223)  评论(0编辑  收藏  举报