js實現深拷貝和淺拷貝
阿新 • • 發佈:2022-05-04
淺拷貝:
思路----------把父物件的屬性,全部拷貝給子物件,實現繼承。
問題---------如果父物件的屬性等於陣列或另一個物件,那麼實際上,子物件獲得的只是一個記憶體地址,不會開闢新棧,不是真正拷貝,因此存在父物件被篡改的可能。
程式碼:
function deepCopy(o){
var f = {};
for(i in o){
f[i] = o[i];
};
return f
}
深拷貝:
思路-----------遞迴呼叫'淺拷貝',可以解決子物件修改時會汙染父物件,此時兩個物件指向的不是一個記憶體地址。
程式碼:
function deepCopy(p,c){ // p 父級物件 c 子集物件 var c = c || {}; for(let i in p){ // 如果父級物件的其中一個屬性是物件 if(typeof p[i]==='object'){ c[i] = (p[i].constructor===Array)?[]:{}; //通過判斷父級物件的屬性的constructor的型別,指定子集物件屬性的型別