const obj =
;const obj2 = obj;
obj2.name =
'keke'
;console.
log(obj)
;//
const obj =
;object.
assign
(obj,,,
);console.
log(obj)
;//
object.assign 方法也是乙個淺拷貝。例如:
const obj =};
const obj2 =
;object.
assign
(obj2,obj)
;// 也是乙個淺拷貝
obj2.friend.name =
'nannan'
;console.
log(obj)
;
但是 object.assign 拷貝的物件屬性值對應的是普通資料型別,沒有物件的話,就是乙個深拷貝
const obj =
;const obj2 =
;object.
assign
(obj2,obj)
;// 深拷貝
obj2.name =
'nannan'
;console.
log(obj)
;
const obj =
};const obj2 = ;
obj2.friend.name = "nannan";
console.log(obj); // }
同樣,如果只有一層的話,那就是乙個深拷貝
const obj = ;
const obj2 = ;
obj2.name = "nannan";
console.log(obj); //
const arr = [1,2,];
const arr2 = arr.concat();
arr2[2].name = 'keke';
console.log(arr);
>
src=
"">
script
>
>
const obj =
}const obj2 =
; $.
extend
(obj2,obj)
; obj2.friend.name =
'nannan'
; console.
log(obj)
;script
>
body
>
>
src=
"">
script
>
>
const obj =
}const obj2 =
; $.
extend
(true
,obj2,obj)
; obj2.friend.name =
'nannan'
; console.
log(obj)
;script
>
body
>
const obj =
}const obj2 = json.parse(json.stringify(obj));
obj2.friend.name = 'nannan';
console.log(obj);
上面使用的方式是json的方法,但是json和js物件還是有區別的。區別在於 json 表示的是資料,鍵所對應的值不能是函式。
但是,這種深拷貝方式有乙個缺陷,如果我拷貝的物件有方法,方法不能夠被拷貝。
const obj = ,
sayhello : function(){},
gender : 'male'
}const obj2 = json.parse(json.stringify(obj));
console.log(obj2); // , gender: 'male' }
const obj = ,
sayhello: function () ,
gender: 'male'
}function deepcopy(oldobj, newobj) ;
deepcopy(item, newobj[key]);
}else if (item instanceof object) else ;
deepcopy(item, newobj[key]);}}
else
}}const cloneobj = {};
deepcopy(obj, cloneobj);
cloneobj.friend.name = 'nannan';
console.log(obj);
console.log(cloneobj);
「淺拷貝」與「深拷貝」
c 中物件的複製就如同 轉殖 用乙個已有的物件快速地複製出多個完全相同的物件。一般而言,以下三種情況都會使用到物件的複製 1 建立乙個新物件,並用另乙個同類的已有物件對新物件進行初始化,例如 cpp view plain copy class rect rect rect1 rect rect2 r...
淺拷貝與深拷貝
淺拷貝 1 2 myclass a,b a b 為了封裝性和解耦,同型別的兩個物件之間進行賦值操作時,所有成員變數被複製,包括私有成員 指標變數。類的成員函式在傳遞或返回物件時都會進行物件複製產生臨時物件,比如函式呼叫時實參變為形參,以及函式返回物件。考慮到效能和使用者要求不同,編譯器不複製物件內部...
「淺拷貝」與「深拷貝」
c 中物件的複製就如同 轉殖 用乙個已有的物件快速地複製出多個完全相同的物件。一般而言,以下三種情況都會使用到物件的複製 1 建立乙個新物件,並用另乙個同類的已有物件對新物件進行初始化,例如 cpp view plain copy class rect rect rect1 rect rect2 r...