JS复杂对象克隆

之前一直比较习惯用Ext.apply()方法来实现对象的克隆,今天遇到一个问题,当对象中含有数组,且数组中包含复杂类型时,Ext.apply()的克隆就有问题了。

于是就想着试试自己能不能解决。在网上查了一会儿,发现如下代码:

function clone(myObj){
if(typeof(myObj) != 'object') return myObj;
if(myObj == null) return myObj;

var myNewObj = new Object();

for(var i in myObj)
myNewObj[i] = clone(myObj[i]);

return myNewObj;
}

将其加进项目试了一下,发现基本实现了我想要的结果。但是有一个问题,当对象内部有数组成员的地方变成了Object类型,而且它的内置方法如“indexof”也被复制成了一遍,意思就是每一个内置方法都有两个同名方法。我想它的主要原因还是没有对Array类型做特殊处理。

于是经过自己理解进行修改,完全实现了我想要的结果。代码如下:

 1 function Clone(myObj) {
 2         /// <summary>
 3         /// 对象复制
 4         /// </summary>
 5         /// <param name="myObj"></param>
 6         /// <returns type=""></returns>
 7         if (myObj === null || myObj === undefined || typeof (myObj) != 'object')
 8             return myObj;//五种简单类型复制
 9         if (myObj.constructor === Array) {//数组复制
10             if (myObj.length === 0) return myObj;
11             else
12                 var myNewArr = [];
13             for (var i = 0; i < myObj.length; i++) {
14                 myNewArr.push(Clone(myObj[i]));
15             }
16             return myNewArr;
17         }
18         //其他对象复制
19         var myNewObj = new Object();
20         for (var i in myObj) {
21             myNewObj[i] = Clone(myObj[i]);
22         }
23         return myNewObj;
24     }

 

 

 

  

 

posted on 2013-12-26 13:54  忄去  阅读(773)  评论(0编辑  收藏  举报

导航