JAvascriptの深いコピーと浅いコピー?

2167 ワード

一、jQueryの$.extend浅いコピーと深いコピー
$.extend( [deep ], target, object1 [, objectN ] );
 deep 
  : Boolean 
   true,      (      )。

 target 
  : Object 

 object1 
  : Object 
    ,                。

objectN 
  : Object 
               。

$.extend   :
var obj1 = {name:xx,age:18,sex:man};
var obj2 = {name:cc,age:18};
$.extend(obj1,obj2);
obj1----->{name:cc,age:18} // obj2  
$.extend   :
var obj1 = {name:xx,age:18,sex:man};
var obj2 = {name:cc,age:18};
$.extend(true,obj1,obj2);

欠点:しかしこれは限界があります:関数をコピーすることができなくて、プロトタイプチェーンはなくて、オブジェクトはobjectで、所属するクラスはなくなりました
二、浅いコピー
       ,        ,      。
function extendCopy(p) {
    var c = {};
    for (var i in p) { 
      c[i] = p[i];
    }
    c.uber = p;
    return c;
  }

三、深コピーとは、「深コピー」とは、本当の意味での配列やオブジェクトのコピーを実現することである.その実装は難しくなく、「浅いコピー」を再帰的に呼び出せばよい.
  function deepCopy(p, c) {
    var c = c || {};
    for (var i in p) {
      if (typeof p[i] === 'object') {
        c[i] = (p[i].constructor === Array) ? [] : {};
        deepCopy(p[i], c[i]);
      } else {
         c[i] = p[i];
      }
    }
    return c;
  }
  :

   --->             “”  “”        。

   --->    ,        ,          ,             (        )          ,                      ,    .....         。  :1,       ,2,       。