深拷贝和浅拷贝

深拷贝和浅拷贝区别

假设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));
原文地址:https://www.cnblogs.com/xm16/p/10355267.html