实现对象深拷贝的简单案例

代码

function deep() {
        var length = arguments.length;
        if (length <= 2) {
            if (length === 1) {
                return deep({}, arguments[0]);
            }
            else if (length === 2) {
                deepCopy(arguments[0],arguments[1]);
            }
            else  {
                return {};
            }
        }
        else {
            for (var i = 1; i < length; i++) {
                deepCopy(arguments[0],arguments[i]);
            }
        }
        return arguments[0];
        function deepCopy(newObj,oldObj) {
            for (var i in oldObj) {
                if (typeof oldObj[i] === 'object') {
                    if (oldObj[i].constructor === Array) {
                        // 如果属性为数组的情况下
                        newObj[i] = [];
                    }
                    else if (oldObj[i] instanceof HTMLElement || oldObj[i] === window) {
                        // 如果属性为dom对象或者window对象的情况下
                        newObj[i] = oldObj[i];
                    }
                    else {
                        // 如果属性为纯粹对象的情况下
                        if(!newObj[i] || !(newObj[i] instanceof Object)) {
                            newObj[i] = {};
                        }
                    }
                    deepCopy(newObj[i],oldObj[i]);
                }
                else {
                    newObj[i] = oldObj[i];
                }
            }
            return newObj;
        }
    }

使用方法

  • deep(a,b) 返回扩展后的a对象,a对象有b对象的所有属性值
  • deep({},a,b)返回一个新对象,新对象包括a对象和b对象的所有属性值,有相同属性时b对象的会覆盖a对象,后面的对象优先级高,可以传多个对象
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值
>