直接上代码
最简单的实现对象深拷贝,仅仅2行代码
原理 先把对象转化为json格式的字符串,然后在解析成一个json格式的对象
可以看到打印结果
备注
js 原生对象有 Object.assign() 只可以浅拷贝,如果元素里边再包含引用数据,copy 的只是一个引用地址
如下
(备注,json.stringify 虽然好用,但是数据量特别大的时候,会耗费性能的,所以还是慎重使用哦!)
最后封装一个对象深拷贝的方法
Object.prototype.deepCopy=function(){ var obj=null;//用于最后返回一个对象,这个对象是深复制的结果 for(var attr in this){//遍历这个对象的每一个属性 if(this.hasOwnProperty(attr)){//主要是递归自有属性 if(typeof (this[attr]==='object')){//如果对象的属性是一个对象,就递归复制它的每一个属性 if(this[attr]===null){//如果对象为null obj[attr]=null; }else if(Object.prototype.toString(this[attr])==='[object Array]'){//如果是个数组 obj[attr]=[]; for(var i=0;i<this[attr].length;i++){ obj[attr].push(this[attr][i].deepCopy()); } }else{//object obj[attr]=this[attr].deepCopy(); } }else{ obj[attr]=this[attr]; } } } return obj; }