function deepClone(obj) {
// 深克隆 JSON.parse(JSON.stringify(obj)) 会导致对象中 Date RegExp Function的成员克隆失败 但是大部分项目的情形都可以使用
// 过滤特殊情况
if(obj === null) return null;
if(obj === undefined) return undefined;
if(typeof obj !== 'object') {return obj}; // 基本数据类型
if(obj instanceof RegExp) {
return new RegExp(obj)
}
if(obj instanceof Function) {
return new Function(obj)
}
if(obj instanceof Date) {
return new Date(obj)
}
// 不直接创建空对象 克隆的结果和之前保持相同所属的类
let newObj = new obj.constructor;
for(let key in obj) {
if(obj.hasOwnProperty(key)) {
newObj[key] = deepClone(obj[key]) //遍历
}
}
return newObj;
}
function clone(obj) {
// 浅克隆
let newObj = new obj.constructor;
for(var key in obj) {
if(!obj.hasOwnProperty(key)) break; // hasOwnProperty防止 遍历到原型链上去了
newObj[key] = obj[key]
}
return newObj;
}