JS对象之浅克隆和深克隆的案例分析

  介绍

这篇文章给大家分享的是有关JS对象之浅克隆和深克隆的案例分析的内容。小编觉得挺实用的,因此分享给大家做个参考。一起跟随小编过来看看吧。

<强>浅克隆

先看代码:

/* *   *浅克隆克隆传入对象,只克隆一层   * @param{一}来源   */函数shallowClone(源){   var tiaget=createEctype(源);//创建一个副本//将原对象的所有属性值赋值到新对象上   (var属性的源){   如果(source.hasOwnProperty(财产)){   tiaget[属性]=[属性]来源;   }   }/* *   *创建副本   * @param{一}来源   */函数createEctype(源){   var newObject={};   如果(Array.isArray(源))   newObject=[];   返回newObject;   }      返回tiaget;   }

执行测试:

===newa;//错误
  newa===newa.a4 [0];//错误
  newa===newa.b.a;//错误===newa.a4 [0];//正确的
  一个===newa.b.a;//真正的

测试执行速度:

/* *   获取传入方法在规定时间内执行次数      示例:   var测试=function () {      };   运行时(测试,1)   表示测试方法在1秒中执行了6819005次   * *//* *   *获取传入方法在规定时间内执行次数   * @param任何}{fn执行的方法   * @param{}时间规定的时间,单位为秒   */函数运行时(fn) {   var开始时间=Date.now ();   var计算=0;   而(Date.now()——开始时间& lt;时间* 1000){   fn.call ();   数+ +;   }   返回计数;   }

 JS对象之浅克隆和深克隆的案例分析

<强>深度克隆

代码:

/* *   *深克隆   *   *示例:   * var={a1:1 a2:2, a3: [1, 2, 3]};   * var b={b1:1 b2:2, b3: (4、5、6)}   * a.b=b;   *本科=一个;   * a.a4=[a, b];   * b.b4=[a, b];   * a.fn=function () {console.log (this.b);返回this.b;};   *   * var newa=deepClone(一个);   * newa.a1=123;   * newa.fn ();   */函数deepClone(源){   这一点。objKeyCache=[];//对象缓存   这一点。objValueCache=[];//对象克隆缓存      这一点。克?function(源){   var=createEctype目标。调用(这,来源);   (var属性的源){   如果(source.hasOwnProperty(财产)){   var值=https://www.yisu.com/zixun/source[属性];   如果(typeof值==="数量"   | | typeof值===安级?   | | typeof值===跋笳鳌?   | | typeof价值==="字符串"   | | typeof价值==="函数"   | | typeof价值==="定义"   | |值===null)   目标[属性]=价值;   else if (typeof值===岸韵蟆?{//如果源对象在对象缓存中存在,就用对象克隆缓存中的值赋值   var指数=this.objKeyCache.indexOf(价值);   如果指数>=0)   目标[属性]=this.objValueCache(指数);   其他{   目标[属性]=?寺?价值);   }   }   其他的   把“未知数据类型”+ (typeof价值);   }   }      返回目标;   };/* *   *创建副本   * @param{一}来源   */函数createEctype(源){   var目标={};   如果(Array.isArray(源))   目标=[];   this.objKeyCache.push(源);   this.objValueCache.push(目标);   返回目标;   }   var newObject=this.clone(源);//释放缓存,防止内存溢出   这一点。objKeyCache=[];   这一点。objValueCache=[];   返回newObject;   }

执行测试:

===newa;//错误
  newa===newa。a4[0]//真实的
  newa===newa.b.a;//正确的===newa.a4 [0];//错误
  一个===newa.b.a;//错误

 JS对象之浅克隆和深克隆的案例分析

JS对象之浅克隆和深克隆的案例分析