首先,我們需要明白什么是深復制(側重指對象方面)?
在javascript中,復制分為淺復制和深復制,個人理解,淺復制就是直接將引用復制,復制前后的兩個對象指向同一個內存地址,對其中一個進行操作,另外一個也會發生同樣的改變,他們只是不同的指針指向了同一塊內存。
而深復制是開辟了一個新的內存地址,把其內容完完全全的復制到這個新的內存地址中,之后對這個對象的任何操作都不會影響到其復制的對象(既兩邊的操作都不會影響彼此),他們成了兩個完全獨立的對象。
那么如何實現所謂的深復制呢?
可以通過遍歷+遞歸實現深復制。
function deepClone ( obj ) { if( typeof obj != "object" ){ return obj ; } var newObj = obj.constructor === Array ? [] : {}; //開辟一塊新的內存空間 for( var i in obj ) { newObj [ i ] = deepClone ( obj [ i ] ); //通過遞歸實現深層的復制 }
return newObj; }
另外,可以通過使用一些框架或庫里的方法來實現深復制
比如 jquery 里的 extend 方法:extend(deep, object) // 第一個參數為可選參數 ,默認為 false 如果傳入了 true 則實現的就是深復制