extend 的深拷貝和淺拷貝詳細講解

2022-02-14 02:10:11 字數 1145 閱讀 6484

語法:jquery.extend( [deep ], target, object1 [, objectn ] )

描述:將兩個或更多物件的內容合併到第乙個物件。

關於$.extend()的用法網上有很多文章,在這裡指向寫寫對深淺拷貝的理解

深淺拷貝對應的引數就是[deep],是可選的,為true或false。預設情況是false(淺拷貝),並且false是不能夠顯示的寫出來的。如果想寫,只能寫true(深拷貝)~~

什麼是深、淺拷貝呢?先講定義,再舉例子

在預設情況下,通過$.extend()合併操作不是遞迴的(淺拷貝);如果第乙個物件的屬性本身是乙個物件或陣列,那麼它將完全用第二個物件相同的key重寫乙個屬性。這些值不會被合併。然而,如果將true作為該函式的第乙個引數,那麼會在物件上進行遞迴的合併(深拷貝)。

淺拷貝(false 預設):如果第二個引數物件有的屬性第乙個引數物件也有,那麼不會進行相同引數內部的比較,直接將第乙個物件的相同引數覆蓋。

深拷貝(true):如果第二個引數物件有的屬性第乙個引數物件也有,還要繼續在這個相同的引數向下一層找,比較相同引數的物件中是否還有不一樣的屬性,如果有,將其繼承到第乙個物件,如果沒有,則覆蓋。

栗子:

var object1 =,

cherry: 97};

var object2 =,

durian: 100};

//預設情況淺拷貝

////

object2的banner覆蓋了object1的banner,但是weight屬性未被繼承

//$.extend(object1, object2);

//深拷貝

////

object2的banner覆蓋了object1的banner,但是weight屬性也被繼承了呦

$.extend(true

,object1, object2);

console.log('object1--->'+json.stringify(object1));

仔細閱讀上面這段**,去執行看結果,你就會理解什麼是深拷貝和淺拷貝了!

九 JS之 extend 之深拷貝 淺拷貝

1 extend 之淺拷貝 common.ajax function param param ajax mergeparam 我們以對ajax進行二次封裝為例來進行講解淺拷貝。上述 就是淺拷貝。mergeparam中有三個引數 timeout param complete,其中timeout和com...

深拷貝和淺拷貝

淺拷貝就是物件的資料成員之間的簡單賦值,如你設計了乙個沒有類而沒有提供它的複製建構函式,當用該類的乙個物件去給令乙個物件賦值時所執行的過程就是淺拷貝,如 class a a private int data int main 這一句b a 就是淺拷貝,執行完這句後b.data 5 如果物件中沒有其他...

淺拷貝和深拷貝

以下情況都會呼叫拷貝建構函式 乙個物件以值傳遞的方式傳入函式體 例如 已知class a,class b void func a a void func a a func b b 此時函式對b的操作是呼叫拷貝建構函式後的臨時拷貝物件。多數傳指標 乙個物件以值傳遞的方式從函式返回 如 return b...