深拷贝:
如果拷贝的时候,将当前对象的数据的引用结构都拷贝一份,即深拷贝,数据在内存中独立存在。
浅拷贝:
若拷贝的时候,只针对当前对象的属性地址的拷贝,即浅拷贝。
var car = {name:'法拉利'};
var p = {name:'张三',age:28,car:car};
// 并不是拷贝,并没有对p对象有任何拷贝行为
var pCopy=p;
// 浅拷贝的代码实现
var pCopy = {};
pCopy.name= p.name;
pCopy.age= p.age;
pCopy.car= p.car;
//深拷贝的代码实现
var pCopy = {};
pCopy.name= p.name;
pCopy.age= p.age;
pCopy.car= {};
pCopy.car.name = car.name;
//浅拷贝的实现
var car = { name: "奔驰"};
var p = {
name: "张三",
age: 27,
car: car,
copy: function () {
// 创建对象
var temp = {};
// 复制属性,在copy中使用this表示当前对象
for(var k in this ) {
temp[k] = this[k];
}
// 返回新对象
return temp;
}
};
var p1 = p.copy();
for(var k in p1){
console.log(k+'-->'+p1[k]);
}
//深拷贝的实现
var p = {
name: "张三",
age: 27,
car: car,
deepCopy: function () {
// 创建对象
var temp = {};
// 复制属性,判断属性是否为引用类型
for (var k in this){
if(typeof this[k] === 'object'){
temp[k] = this[k].deepCopy();
}else {
temp[k] = this[k];
}
}
return temp;
}
};