手写浅拷贝和深拷贝(深拷贝对象中包含函数的处理方法)

本文介绍了JavaScript中实现对象拷贝的两种方法:浅拷贝和深拷贝。通过示例代码详细解释了浅拷贝函数`shallowCopy`和深拷贝函数`deepCopy`的工作原理,展示了它们在处理复杂对象和函数引用时的区别。对于浅拷贝,复制的是对象的引用,而深拷贝则会创建新的对象实例。文章强调了在处理包含对象和函数的复杂数据结构时,正确理解拷贝行为的重要性。
摘要由CSDN通过智能技术生成

手写浅拷贝

function shallowCopy(obj)
{
 let objNew = new Object();
 for(let item in obj)
     {
         objNew[item] = obj[item];
     }
 return objNew;
}
let obj = {
    name: "a",
    obj1: {
        age : 1
    },
    fn : function(){
        let a = "1";
        console.log(a);
    }
}
let copy = shallowCopy(obj);
copy.obj1 === obj.obj1; //true
copy.fn === obj.fn; //true

手写深拷贝

function deepCopy(obj)
{
    let arr = Array.isArray(obj)? []:{};
    for(let i in obj)
    {
            if(typeof obj[i] === "object" && (Boolean(obj[i])))
            {
                arr[i] = deepCopy(obj[i]);
            }else if(typeof obj[i] === "function")
            {
                arr[i] = new Function("return " + obj[i].toString())();
            }else{
                arr[i] = obj[i];
            }
    }
    return arr;
}
let obj = {
    name: "a",
    obj1: {
        age : 1
    },
    fn : function(){
        let a = "1";
        console.log(a);
    }
}
let copy = deepCopy(obj)
copy.obj1 === obj.obj1; //false
copy.fn === obj.fn; //false
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值