深拷贝&&浅拷贝实现

110 阅读1分钟

浅拷贝实现

    var Chinese = {
        nation:'中国',
        japanese:[1,2,3]
    };
    
    function extendCopy(obj){
        let temp = {}
        
        for(let key in obj){
            temp[key] = obj[key]
        }
        return temp;
    }
    
    let obj = extendCopy(Chinese)
    
    //这样的拷贝有一个问题。那就是,如果父对象的属性等于数组或另一个对象,那么实际上,子对象获得的只是一个内存地址,而不是真正拷贝,因此存在父对象被篡改的可能。

深拷贝

递归调用"浅拷贝"
    var Chinese = {
        nation:'中国',
        japanese:[1,2,3]
    };
    function deepCopy(obj) {
        let temp = Array.isArray(obj) ? [] : {}
        for (let key in obj){
            console.log(obj[key])
            temp = isObject(obj[key]) ? deepCopy(obj[key]) : obj[key]
        }
        return temp
    }
    function  isObject(obj) {
        return (typeof obj === 'object'|| typeof  obj === 'function') && obj!== null
    }

    var Chinese = {
        nation:'中国',
        japanese:'日本'
    };
    
    deepCopy(Chinese)