对象拷贝

for in 对象复制继承

浅拷贝

for(var attr in Parent){
	children[attr] = Parent[attr];
}

function extend(obj1,obj2){
	for(var attr in obj2){
		obj1[attr] = obj2[attr];
	}
}

extend(children,Parent);

深拷贝

var obj = {
	a:{b:10}
}
function deepCopy(obj){
	if(typeof obj != 'object'){
		//console.trace();
		return obj;
	}
	var newObj = {};
	for(var attr in obj){
		newObj[attr] = arguments.callee(obj[attr]);
	}
	return newObj;
}

var obj2 = deepCopy(obj);

obj2.a.b=20;
alert(obj.a.b)  

写法2——渡一

浅克隆

var obj = {
    name:'abc',
    age:123,
    sex:'female'
}

var obj1 = {}

function clone(origin,target){
    var target = target || {};
    for(var prop in origin){
        target[prop] = origin[prop];
    }
    return target;
}
clone(obj,obj1)

深克隆

/*deepcopy*/
var obj = {
    name : 'abc',
    age : 19,
    card : ['visa','master'],
    wife : {
        name : 'bcd',
        son : {
            name : 'aaa'
        }
    }
}


function deepCopy(origin,target){
    var target = target || {},
        toStr = Object.prototype.toString(),
        arrStr = "[Object Array]";
    for(var prop in origin){
        if(origin[prop] != "null" && origin.hasOwnProperty(prop)){ //判断是不是自己对象上的属性
            if(typeof(origin[prop]) == 'Object'){    //是不是引用值
                target[prop] = toStr.call(origin[prop]) == arrStr ? [] : {}; //判断是[]还是{}
                deepCopy(origin[prop],target[prop]); //递归继续分解
            }else{
                target[prop] = origin[prop]
            }

        }
    }
    return target;
}
var obj1={}
deepCopy(obj,obj1)

  

原文地址:https://www.cnblogs.com/lisa2544/p/5512374.html