function deepCopy(data){
const result = Array.isArray(data) ? [] : (typeof data === 'function' ? data.bind() : {})
for(let i in data){
if(data.hasOwnProperty(i)){
if(typeof data[i] === 'object'){
result[i] = deepCopy(data[i])
}else if(typeof data[i] === 'function'){
result[i] = data[i].bind(result)
}else{
result[i] = data[i]
}
}
}
return result
}