深拷貝 與 淺拷貝

2021-10-09 14:38:58 字數 2703 閱讀 8553

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...