js中的深淺拷貝
阿新 • • 發佈:2019-01-04
js中的深拷貝與淺拷貝
深拷貝:
如果拷貝的時候,將當前物件的資料的引用結構都拷貝一份,即深拷貝,資料在記憶體中獨立存在。
淺拷貝:
若拷貝的時候,只針對當前物件的屬性地址的拷貝,即淺拷貝。
拷貝:
複製一份,指將物件資料複製一份。
*注意:在討論深\淺拷貝的時候,一定要保證物件的屬性是引用型別。
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;
}
};