淺拷貝與深拷貝區別
阿新 • • 發佈:2019-04-20
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)
Chinese.birthPlaces = [‘北京‘,‘上海‘,‘香港‘];
// 深拷貝 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)
淺拷貝與深拷貝區別