克隆封装

// 深拷贝封装
function deepClone(origin, target) {
    var target = target || {},
        toStr = Object.prototype.toString,
        arrType = '[object Array]';

    for(var key in origin) {
        // 排除原型
        if (origin.hasOwnProperty(key)) {
            // 判断是否为引用值,要排除 null, 得到:数组 或 对象
            if (typeof(origin[key]) === 'object' && origin[key] !== null) {
                // 判断数组 还是 对象
                // if (toStr.call(origin[key]) === arrType) {
                //     target[key] = [];
                // } else {
                //     target[key] = {};
                // }
                // 三目运算
                toStr.call(origin[key]) === arrType ? target[key] = []
                                                    : target[key] = {};

                // 递归
                deepClone(origin[key], target[key]);
            } else {
                // 原始值
                target[key] = origin[key];
            }
        }
    }
    return target;
}

// 浅拷贝封装
function clone(origin, target) {
    var tar = target || {};
    for(var key in origin) {
        // 排除原型
        if (origin.hasOwnProperty(key)) {
            tar[key] = origin[key];
        }
    }
    return tar;
}

posted on 2021-12-21 14:16  Dong1995  阅读(29)  评论(0编辑  收藏  举报

导航