362day(js克隆)

《2018年9月30日》【连续362天】

标题:js克隆;
内容:

// 浅层克隆

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);


// 深度克隆
var obj2 = {
	name : "abc",
	age : 123,
	card : ['visa','master'],
	wife :{
		name : 'bcd',
		son :{
			name : "aaa"
		}
	}
}
var obj3 ={}
// 遍历对象
// 1.判断是不是原始值
// 2.判段是数组还是对象
// 3.建立相应的数组或对象
// 递归

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

362day(js克隆)