1. 程式人生 > >淺拷貝與深拷貝區別

淺拷貝與深拷貝區別

lse 存在 淺拷貝 obj 而不是 doc 如果 div 類型

// 淺拷貝 // 把父對象的屬性,全部拷貝給子對象,也能實現繼承 function extendCopy(p) { var c = {} for(var i in p) { c[i] = p[i]; } c.uber = p; return c; } var Doctor = extendCopy(Chinese); Doctor.career = "醫生"; // console.log(Doctor.nation); // 如果父對象的屬性等於數組或另一個對象,實際上,子對象獲得的只是一個內存地址,而不是真正的拷貝,因此存在父對象被篡改的可能
Chinese.birthPlaces = [‘北京‘,‘上海‘,‘香港‘];
var Doctor = extendCopy(Chinese); Doctor.birthPlaces.push(‘廈門‘); console.log(Doctor.birthPlaces) console.log(Chinese.birthPlaces) // extendCopy()只是拷貝基本類型的數據,我們把這種拷貝叫做"淺拷貝"。這是早期jQuery實現繼承的方式。
// 深拷貝 function deepCopy(p,c) { var c = c || {}; for(var i in p) { // console.log( p[i]); if(typeof p[i] === ‘object‘) { c[i] = (p[i].constructor === Array) ? [] : {}; // console.log( c[i]); deepCopy(p[i], c[i]); }else { c[i] = p[i]; } } return c; } var Doctor = deepCopy(Chinese); Doctor.birthPlaces.push(‘廈門‘); // console.log(Doctor.birthPlaces) // console.log(Chinese.birthPlaces)

淺拷貝與深拷貝區別