// 1. 浅克隆
// var obj = {
// name: 'nihao',
// age: 18,
// sex: 'male'
// }
// var obj1 = {}
// function clone (origin, target) {
// var target = target || {};
// for(prop in origin) {
// target[prop] = origin[prop]
// }
// return target
// }
// console.log(clone(obj, obj1));
// 2.深克隆
var obj = {
name: 'nihao',
age: 18,
sex: 'male',
card: ['aaa', 'bbb'],
shabi: {
name: 'abc',
youbing: {
name: 'cde'
}
}
}
// 步骤:
// 1. 判断是不是原始值
// 2. 判断类型谁不是引用值(数组或者对象)
// 3. 建立相应的数组或者对象
// 4. 递归
var obj1 = {}
function deepClone(origin, target){
var target = target || {},
toStr = Object.prototype.toString,
arrStr = "[object Array]";
for (var prop in origin) {
if (origin.hasOwnProperty(prop)) {
if (typeof(origin[prop]) == "object" && origin[prop] != null) {
if (toStr.call(origin[prop]) == arrStr) {
target[prop] = [];
} else {
target[prop] = {};
}
deepClone(origin[prop], target[prop]);
} else {
target[prop] = origin[prop];
}
}
}
return target;
}
deepClone(obj, obj1);