JavaScript中深层克隆函数

JavaScript中深层克隆函数

总体思路就是运用了一个递归,来持续验证当你克隆对象的时候,对象中未知元素具体有多少对象的问题。

    function clone(origin, target) {
            var target = target || {}; //判断是否传递了参数 target
            var calls = Object.prototype.toString; //使用根源性的to string 方法 然后调用call改变to string 方法的指向 来判断是不是数组
            var as_call = "[Object Array]"; // 方便做对比
            for (var key in origin) { //设置一个for in循环来遍历 对象 for in循环也可以遍历数组 
                if (origin.hasOwnProperty(key)) { //  判断 对象中是否存在原型 如果有原型则不遍历原型中的属性 
                    if (origin[key] !== "null" && typeof (origin[key]) ==
                        "object") { //判断遍历出的对象是不是原始值 如果是原始值就直接赋值 不是的话就继续 下面判断
                        /* if (calls.call(origin[key]) == as_call) { //判断是不是数组  如果是数组 就放一个空数组 然后复制 
                            target[key] = [];
                        } else { //否则 不是数组他就是对象 就用一个空对象接受他
                            target[key] = {};
                        } */
                        target[key] = (calls.call(origin[key])) == as_call ? [] : {}; //简化上述过程

                        clone(origin[key], target[key]);
                        //使用递归 来持续验证 对象中的内容 又没有对象 如果有对象的话就持续调用 持续递归直到 遍历到原始值为止
                    } else {
                        target[key] = origin[key]; //递归的出口
                    }
                }
            }
            return target; // 如果上述没有  target 的话 就返回一个 target 
        }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值