const DeepCopy=function(data){
if(data==null) return data
if(typeof data=="function") return new Function("return"+data.toString())()
if(typeof data !=="object") return data
if(data.constructor===Date) return new Date(data)
if(data.constructor===RegExp) return new RegExp(data)
const newData =new data.constructor() //保持继承链
for (let key in data) {
if (Object.hasOwnProperty.call(data, key)) { //不遍历其原型链上的属性
let val = data[key];
newData[key]=typeof val==="object"||"function"?arguments.callee(val):val
} // 使用arguments.callee解除与函数名的耦合
}
return newData
}