zoukankan      html  css  js  c++  java
  • Js 克隆

    1.浅表克隆

      调用concate() 或者slice() 方法,可以创建数组的浅表副本,在浅表副本中,如果原始数组的元素是复杂数据类型,则元素值指向对象的引用而非对象本身,

      与原始数组一样,浅表副本的元素值也是指向对象引用,对对象所做的任何更改都会在两个数组中反映出来。

    2.深度克隆

     深度克隆是相对于浅表而言的,在克隆的深度副本中,不断复制索引,还将复制原始数组中的所有对象,从而使新数组和原始数组指向不同对象。

    实现的一个方法:

    function cloneArray(_arry ,deep){
    var newArray=[];
    if(deep){
    for(var i in _arry){
    var prop =_arry[i];
    if(typeof prop =='object'){
    if(prop instanceof Array){
    newArray[i]=[];
    for(var j=0;j<prop.length;j++){
    if(typeof prop[j]!='object'){
    newArray[i].push(prop[j]);
    }
    else{
    newArray[i].push(cloneArray(prop[j]),true);
    }
    }
    }
    else{
    newArray[i]=cloneArray(prop,true);
    }
    }
    else{
    newArray[i]=prop;
    }
    }
    }
    else{
    newArray=_arry.concat();
    }
    return newArray;
    }

    测试方法:

    var p ={sex:1,ages:32};
    var a =["tomn",p];
    var newarray =cloneArray(a,false);
    alert(newarray[1].sex);
    p.sex=2;
    alert(newarray[1].sex);

  • 相关阅读:
    Git Revert用法
    C语言------数据输入、输出函数
    C语言------运算符和表达式
    jsp九大内置对象
    三层结构下的多表查询,实体类写法
    String类型中"=="和"equals"的区别
    创建对象数组,给数组赋值(两种理解思路)
    Vbs整人代码
    设计模式之单例
    事务
  • 原文地址:https://www.cnblogs.com/linsu/p/3731504.html
Copyright © 2011-2022 走看看