Java Script 浅拷贝,深拷贝

浅拷贝

 var obj = {
    name : 'zhou',
    sex : 'male',
    age : 18,
 }
var obj1 = {

}
//浅拷贝
function clone (Target, Orgin) {
    for(var props in Orgin){
        Target[props] = Orgin[props]
    }
    console.log(Target)
}
clone(obj1,obj);

深拷贝

// 思路:1.循环遍历 for-in(遍历对象,返回的是key)
// 2,判断对象属性的数据类型是否未非原始值。
// 原始值:number,string,Boolean,null,undefined。引用值:Object,Array(key为0,1,2的特殊对象)
// 3,若为引用值再判断是数组还是对象。 判断方法:typeof ,instanceof  toString  constructer
// 4,新建对应的数组或对象 
// 5, 递归

var obj = {
    name : 'zhou',
    sex : 'female',
    age : 18,
    identify : ['adb', 123, true],
    husband : {
        name : 'tang',
        daughter : {
            name : 'guo',
            by : null
        }
    },
    by: null,
}

var obj1 = {

}

function deepClone (Target, Origin) {
    var Target = Target || {}
    var toStr = Object.prototype.toString
    for ( var prop in Origin) {
        if(Origin.hasOwnProperty(prop)){
            if(Origin[prop] !== null && typeof(Origin[prop]) == 'object'){
                Target[prop] = (toStr.call(Origin[prop]) == [object Array]) ? [] : {}
                deepClone(Target[prop], Origin[prop])
            } else {
                Target[prop] = Origin[prop]
            }
        }
    }
}

deepClone(obj1,obj);
console.log(obj1);

你可能感兴趣的:(Java Script 浅拷贝,深拷贝)