zoukankan      html  css  js  c++  java
  • 深拷贝和浅拷贝

    深拷贝和浅拷贝区别

    假设A复制了B,当B属性值发生改变 A也跟着改变  这就是浅拷贝  反之深拷贝,

    var person1 = {
        name : '张三',
        age : 18,
        sex : 'male',
        children : {
            first : {
                name : '小一',
                age : 15
            },
            center : {
                name : '小二',
                age : 10
            },
            last : {
                name : '小三',
                age : 5
            },
            car : ['Benz', 'Mazda']
        },
        arr : [1, 2],
        fun : function(){}
    };
    // console.log(person1)
    //浅拷贝
    var tt = {};
    for(var key in person1){
        tt[key] = person1[key]
    }
    // tt.children.aa = 'bb';
    // console.log(tt)
    
    // //深拷贝
    function deepClone (origin, target){
        var target = target || {};
        var toStr = Object.prototype.toString;
        var arrType = '[object Array]';
    
        for(var key in origin){
            if(origin.hasOwnProperty(key)){  //hasOwnProperty判断属性是否自己本身属性     原型继承来的则判断为假
                if(typeof(origin[key]) === 'object' && origin[key] !== null){
                    if(toStr.call(origin[key]) === arrType){
                        target[key] = [];
                    }else{
                        target[key] = {};
                    }
                    deepClone (origin[key], target[key])
                }else{
                    target[key] = origin[key]
                }
            }
        }
        return target
    }
    console.log(deepClone(person1));
  • 相关阅读:
    Python 集合
    Python 文字列
    JUNIT5(maven配置)
    Javascript严格模式
    移动互联测试
    Python的基础知识
    Linux系统下发件oa环境
    禅道的使用
    Linux系统的安装过程
    Oracle基础知识
  • 原文地址:https://www.cnblogs.com/xm16/p/10355267.html
Copyright © 2011-2022 走看看