//// object.assign()1.使用 slice 或 contcat 方法實現簡單複製,簡單值不一起改變,但是引用型別則原來物件和複製物件一起改變
var arr1 = [1, 2, 3, 4
], arr2 = arr1.slice(0
), arr3 =arr1.concat();
console.log(arr1, arr2, arr3);
//[1, 2, 3, 4] [1, 2, 3, 4] [1, 2, 3, 4],
arr2[2] = 10
; arr3[
2] = 11
; console.log(arr1, arr2, arr3);
//[1, 2, 3, 4] [1, 2, 10, 4] [1, 2, 11, 4],
//但是引用型別則原來物件和複製物件一起改變
var fun =function(log) ,
arr1 = [1, 2, [3, 4], , fun],
arr2 = arr1.slice(0
), arr3 =arr1.concat();
console.log(arr1, arr2, arr3);
arr1[
0] = 10
; arr2[
3].a = 100
; arr3[
2][1] = 5
; console.log(arr1, arr2, arr3);
var obj = };
var copy = object.assign({}, obj); //淺拷貝
//因為 object.assign()拷貝的是屬性值。
//假如源物件的屬性值是乙個物件的引用,那麼它也只指向那個引用。
//也就是說,如果物件的屬性值為簡單型別(如string, number),通過object.assign({},srcobj);得到的新物件為深拷貝;
//如果屬性值為物件或其它引用型別,那對於這個物件而言其實是淺拷貝的。
console.log(copy); //
copy.a=2;
copy.b.d=2
console.log('obj',obj);
console.log('copy',copy);
//1.0深度複製(1.使用jq的$.extend(true,target,obj))
var arr1 = [1, 2, [3, 4], , 7
], arr2 = $.extend(true
, , arr1);
console.log(
'arr2
',arr2);
arr2[
1]=10
; console.log(
'arr2
',arr1);
console.log(
'arr2
',arr2);
物件的深度複製newobj = object.create(sourceobj)
object.prototype.clone =function() ;
for(var i in
this
)
return
obj;
}陣列的深度複製
array.prototype.clone =function()
else
}return
arr;
}深度複製newobj = json.parse(json.stringify(sourceobj));
var arr1 = [1, 2, [3, 4], , 7
], arr2 =json.parse(json.stringify(arr1));
console.log(arr1, arr2);
//[1, 2, [3, 4], , 7] [1, 2, [3, 4], , 7],
arr2[1] = 10
; arr2[
3].a = 20
; console.log(arr1[
1], arr2[1]);//
2 10
console.log(arr1[3], arr2[3]);//
oc 深淺複製
淺 復 制 在複製操作時,對於被複製的物件的每一層複製都是指標複製。深 復 制 在複製操作時,對於被複製的物件至少有一層複製是物件複製。完全複製 在複製操作時,對於被複製的物件的每一層複製都是物件複製。注 1 在複製操作時,對於物件有n層是物件複製,我們可稱作n級深複製,此處n應大於等於1。2 對於...
深淺複製 2
前面講了深淺複製的概念,而實操中我們會遇到更多的情況 我們可以看到這兩個copywithzone方法在arc下已經是放棄了,這兩個方法的使用非常簡單,一般的格式如下 1.實現nscopying協議 2.實現copywithzone方法 3.呼叫 我們看看結果 結果非常明顯了,這類似於上篇所講的情況,...
Python 深淺複製
python中的賦值語句不複製物件,它們在目標和物件之間建立繫結。對於可變的或包含可變項的容器,有時需要乙個副本,所以可以改變乙個副本而不改變另乙個。將建立乙個新物件,但它包含的是對原始物件包含的項的引用。a b list a c a.copy d copy.copy a 建立乙個新物件,並且遞迴的...