版權聲明:作者原創,轉載請注明出處!
語法: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));
仔細閱讀上面這段代碼,去運行看結果,你就會理解什么是深拷貝和淺拷貝了!
