$.extend()的深拷貝和淺拷貝詳細講解


語法:jQuery.extend( [deep ], target, object1 [, objectN ] )

描述: 將兩個或更多對象的內容合並到第一個對象。

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

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

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

在默認情況下,通過$.extend()合並操作不是遞歸的(淺拷貝);如果第一個對象的屬性本身是一個對象或數組,那么它將完全用第二個對象相同的key重寫一個屬性。這些值不會被合並。然而,如果將 true 作為該函數的第一個參數,那么會在對象上進行遞歸的合並(深拷貝)。

淺拷貝(false 默認):如果第二個參數對象有的屬性第一個參數對象也有,那么不會進行相同參數內部的比較,直接將第一個對象的相同參數覆蓋。

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

栗子:

var object1 = { apple: 0, banana: { weight: 52, price: 100 }, cherry: 97 }; var object2 = { banana: { price: 200 }, durian: 100 }; //默認情況淺拷貝 //object1--->{"apple":0,"banana":{"price":200},"cherry":97,"durian":100} //object2的banner覆蓋了object1的banner,但是weight屬性未被繼承 //$.extend(object1, object2);

//深拷貝 //object1--->{"apple":0,"banana":{"weight":52,"price":200},"cherry":97,"durian":100} //object2的banner覆蓋了object1的banner,但是weight屬性也被繼承了呦
$.extend(true,object1, object2); console.log('object1--->'+JSON.stringify(object1));

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM