Js 克隆

1.浅表克隆

  调用concate() 或者slice() 方法,可以创建数组的浅表副本,在浅表副本中,如果原始数组的元素是复杂数据类型,则元素值指向对象的引用而非对象本身,

  与原始数组一样,浅表副本的元素值也是指向对象引用,对对象所做的任何更改都会在两个数组中反映出来。

2.深度克隆

 深度克隆是相对于浅表而言的,在克隆的深度副本中,不断复制索引,还将复制原始数组中的所有对象,从而使新数组和原始数组指向不同对象。

实现的一个方法:

function cloneArray(_arry ,deep){
var newArray=[];
if(deep){
for(var i in _arry){
var prop =_arry[i];
if(typeof prop =='object'){
if(prop instanceof Array){
newArray[i]=[];
for(var j=0;j<prop.length;j++){
if(typeof prop[j]!='object'){
newArray[i].push(prop[j]);
}
else{
newArray[i].push(cloneArray(prop[j]),true);
}
}
}
else{
newArray[i]=cloneArray(prop,true);
}
}
else{
newArray[i]=prop;
}
}
}
else{
newArray=_arry.concat();
}
return newArray;
}

测试方法:

var p ={sex:1,ages:32};
var a =["tomn",p];
var newarray =cloneArray(a,false);
alert(newarray[1].sex);
p.sex=2;
alert(newarray[1].sex);

原文地址:https://www.cnblogs.com/linsu/p/3731504.html