浅拷贝
- 会创建一个新的对象
- 只会复制对象的属性
- 如果该对象中有其他引用值,会复制该引用值的引用地址。
Object.prototype.num = 1;
var person1 = {
name:'张三',
age:18,
height:180,
weight:140,
}
function clone(origin,target){
var tar =target || {};
for(var key in origin){
if(origin.hasOwnProperty(key)){
tar[key] = origin[key];
}
}
return tar;
}
var person2 = clone(person1);
person2.name = '李四';
console.log(person1,person2);
Object.prototype.num = 1;
var person1={
name:'张三',
age:18,
height:180,
weight:140,
children:{
first:{
name:'张一',
age:13
}
}
}
function clone(origin,target){
var tar =target || {};
for(var key in origin){
if(origin.hasOwnProperty(key)){
tar[key] = origin[key];
}
}
return tar;
}
var person2 = clone(person1);
person2.name = '李四';
person2.children.first.name='李三'
console.log(person1,person2);
深拷贝
- 创建一个新的对象
- 复制对象的属性
- 如果该对象中有其他引用值,会依次复制引用值的属性
Object.prototype.num = 1;
var person1={
name:'张三',
age:18,
height:180,
weight:140,
children:{
first:{
name:'张一',
age:13
},
second:{
name:'张二',
age:13
},
third:{
name:'张四',
age:13
},
car:['Benz','Mazda']
}
}
function deepClone(origin,target){
var target = target || {};
toStr = Object.prototype.toString,
arrType='[object Array]';
for(var key in origin){
if(origin.hasOwnProperty(key)){
if(typeof(origin[key])=='object' && origin[key] !== null){
if(toStr.call(origin[key])===arrType){
target[key] = [];
}else{
target[key] = {};
}
deepClone(origin[key],target[key]);
}else{
target[key] = origin[key];
}
}
}
return target;
}
var person2=deepClone(person1);
person2.children.first.name = '李四'
console.log(person1,person2);