1. 程式人生 > 其它 >js實現深拷貝和淺拷貝

js實現深拷貝和淺拷貝

淺拷貝:

思路----------把父物件的屬性,全部拷貝給子物件,實現繼承。

問題---------如果父物件的屬性等於陣列或另一個物件,那麼實際上,子物件獲得的只是一個記憶體地址,不會開闢新棧,不是真正拷貝,因此存在父物件被篡改的可能。

程式碼:

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的型別,指定子集物件屬性的型別