【js工具函数】js实现深拷贝(数组和对象嵌套多级都可实现)

//实现数组和对象的深copy
        function deepCopy(obj){
            let type = Object.prototype.toString.call(obj)
            if(type == "[object Array]"){
                let backObj = [];
                for(let val of obj){
                    backObj.push(deepCopy(val))
                };
                return backObj;
            }
            if(type == "[object Object]"){
                let backObj = {};
                for(let key in obj){
                    if(obj.hasOwnProperty(key)){
                        backObj[key] = deepCopy(obj[key])
                    }
                };
                return backObj;
            }
            return obj;
        }
        

        //实现两个函数
        let testFn1 = function(data){
            console.log("testFn11111函数")
        }

        let testFn2 = function(data){
            console.log("testFn222222函数")
        }

        //要复制的对象
        let obj = {
            "key":"123",//字符串
            "fn":testFn1,//函数
            "arr":["123",{//数组里面嵌入对象
                "key":'456',
                "fn":testFn1,
            }],
            "reg":/123/g,//正则
            'date':new Date(),//时间戳
        };
        //赋值的对象
        let a =  deepCopy(obj);
        let b =  deepCopy(obj);
        console.log(a)

        //2s后修改,修改太快,时间戳没有变化
        setTimeout(function(){
            b.fn = testFn2;
            b.arr[1].fn = testFn2;
            b.reg = /789/g;
            b.date = new Date();
            console.log(b)
        },2000)```

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值