原生深拷贝函数

76 阅读1分钟
        const obj = {
            uname:'pink',
            age:20,
            hobby:['蓝','足'],
            family:{
                baby:'oldpink'
            }
        }
        const o = {}
        function deepCopy(newObj,oldObj){
            for(let k in oldObj){
                //处理数组   k是属性名
                //先判断Array
                if(oldObj[k] instanceof Array){          //必须先判断数组然后判断对象,不能颠倒
                   
                    newObj[k] = []
                    
                    deepCopy(newObj[k],oldObj[k])    //此时的k指的是索引值
                    
                }else if(oldObj[k] instanceof Object){    //再判断Object,因为数组也属于Object
                    
                    newObj[k] = {}
                    
                    deepCopy(newObj[k],oldObj[k])
                } else{
                    
                    newObj[k] = oldObj[k]
                }
               
            }
        }
        
        deepCopy(o,obj)
        console.log(o);
        o.hobby = ['www']
        o.family.baby = 'newpink'
        console.log(obj);
    </script>