一、jquery的$.extend 淺拷貝與深拷貝
$.extend( [deep ], target, object1 [, objectn ] );
deep
型別: boolean
如果是true,合併成為遞迴(又叫做深拷貝)。
target
型別: object
object1
型別: object
乙個物件,它包含額外的屬性合併到第乙個引數。
objectn
型別: object
包含額外的屬性合併到第乙個引數。
$.extend淺拷貝:
var obj1 = ;
var obj2 = ;
$.extend(obj1,obj2);
obj1-----> //被obj2覆蓋
$.extend深拷貝:
var obj1 = ;
var obj2 = ;
$.extend(true,obj1,obj2);
缺點:不過這有侷限性:無法複製函式,原型鏈沒了,物件就是object,所屬的類沒了
二、淺拷貝
把父物件的屬性,全部拷貝給子物件,也能實現繼承。
function
extendcopy
(p) ;
for (var i in p)
c.uber = p;
return c;
}
三、深拷貝
所謂」深拷貝」,就是能夠實現真正意義上的陣列和物件的拷貝。它的實現並不難,只要遞迴呼叫」淺拷貝」就行了。
function
deepcopy
(p, c) ;
for (var i in p) ;
deepcopy(p[i], c[i]);
} else
}return c;
}
總結:
淺複製--->就是將乙個物件的記憶體位址的「」編號「」複製給另乙個物件。
深複製--->實現原理,先新建乙個空物件,記憶體中新開闢一塊位址,把被複製物件的所有可列舉的(注意可列舉的物件)屬性方法一一複製過來,注意要用遞迴來複製子物件裡面的所有屬性和方法,直到子子.....屬性為基本資料型別。總結:1,新開闢記憶體位址,2,遞迴來刨根複製。
JavaScript中的深拷貝和淺拷貝
通俗的說,二者之前最大的不同就是它們的賦值方式。深拷貝的賦值方式就是值賦值,淺拷貝的賦值方式就是物件賦值。下面具體寫兩個例子來使你更加易懂。深拷貝 let a 5 let b a b 10 console.log a 輸出a 5 console.log b 輸出b 10 a和b的值是各自的,互相並沒...
javascript中的深拷貝和淺拷貝
一 遇到的問題 寫了以下的一段js var a a,b,c var c a c.push d 然後console.log a 會發現a中也多了d 二 查詢資料並找到原因 因為在js中,物件和陣列都是引用傳遞,所謂引用傳遞就是當變數c賦值為陣列a後,a和c便指向了同乙個位址,這個位址的值便是 a,b,...
javascript中的深拷貝和淺拷貝
前拷貝 var obj var obj1 for var i in obj console.log obj1 深拷貝 var obj 封裝深拷貝 function deepcopy obj,obj1 else 在利用遞迴處理 複雜型別陣列 deepcopy obj key obj1 key var ...