当前位置 博文首页 > 小丞同学:克隆 JavaScript

    小丞同学:克隆 JavaScript

    作者:[db:作者] 时间:2021-07-20 18:41

    克隆

    浅克隆

    浅克隆无法copy数组和对象

    var obj = {
        name : "abs",
        age : '18',
        sex : 'male'
    }
    var obj1 = {}
    function clone(Origin,target) {
        target = target || {};//防止用户不输入target
        for(var k in Origin){
            target[k] = Origin[k];
        }
    }
    clone(obj,obj1);
    

    深克隆

    先判断它是什么,原始值,数组还是对象,分别处理

    1. 遍历对象
    2. 是原始值直接copy
    3. 不是原始值判断是数组还是对象
    4. 是数组建空数组
    5. 是对象建空对象
    6. 建立了之后再遍历一遍原始对象或数组里是啥
    7. 递归
    var obj = {
        name : 'lin',
        age : '18',
        sex : 'male',
        card : [1,2,3,4],
        wife : {
            name : 'bcsds',
            son : {
                name : 'aaa'
            },
            age : '23'
        }
    }
    var obj1 = {}
    //原始值和对象数组typeof返回值有区别
    function deepClone(origin,target) {
        target = target || {};
        for(var k in origin) {
            if(origin.hasOwnProperty(k)){
                if(typeof(origin[k]) == 'object') {
                    if(Object.prototype.toString.call(origin[k]) == '[object Array]') {
                        target[k] = [];
                    }else {
                        target[k] = {};
                    }
                    deepClone(origin[k],target[k]);
                }else {
                    target[k] = origin[k];
                }
            }
        }
    }
    deepClone(obj,obj1);
    
    cs
    下一篇:没有了