浅克隆
function shallowClone(origin, target){
var target = target||{};//当没有传入target时,创建一个空对象
for(var prop in origin){
if(origin.hasOwnProperty(prop)){//判断是不是原型链上的属性
target[prop] = origin[prop];
}
}
return target;
}
深克隆
function deepClone(origin, target){
var target = target||{},///参数默认值
toStr = Object.prototype.toString,
//存储对象的toString方法,以弥补typeof不能区分数组和对象的缺点
arrStr = '[object Array]';
//数组调用对象的toString方法,返回值就是这个
//如果是对象,返回值就是[object, object]
for(var prop in origin){
if(origin.hasOwnProperty(prop)){//判断是不是原型链上的属性
if(origin[prop] !== null && typeof(origin[prop]) == 'object'){
//如果这个属性是对象且不是null对象,则执行递归
target[prop] = (toStr.call(origin[prop]) == arrStr) ? [] : {};
//区分数组和对象,进行创建一个空的容器
deepClone(origin[prop], target[prop]);
}else{
target[prop] = origin[prop];
}
}
}
return target;
}