克隆
对象的克隆学习
浅层克隆
1
2
3
4
5
6
7function clone(origin, target){
for(var prop in origin){
if(origin.hasOwnProperty(prop)){
target[prop] = origin[prop];
}
}
}- 存在的问题:当克隆的元素为引用值的时候,由于origin和target中的元素指向同一个地址,所以当其中一个改变了元素中的值的时候,另一个也发生了改变,于是我们来学习深度克隆
深层克隆
首先判断引用值可以用typeof(),然后为了区别对象和数组,可以使用以下的方法:- Object.prototype.toString
- constructor
- instanceof 通过以上的代码,就可以解决浅层克隆的问题
1
2
3
4
5
6
7
8
9
10
11
12
13
14function clone(origin,target){
var toStr = Object.prototype.toString,
compare = '[object Array]';
for(var prop in origin){
if(origin.hasOwnProperty(prop)){
if(typeof(origin[prop])=='object'){
target[prop]=(toStr.call(origin[prop])==compare)?[]:{};
clone(origin[prop],target[prop])
}else{
target[prop] = origin[prop];
}
}
}
}