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);

  • 相关阅读:
    C++中的extern "C"【转】
    无题
    MATLAB中文件的读写和数据的导入导出【转】
    逝去的2012
    C/C++语言中Static的作用详述
    C++:源文件与头文件有什么区别【转】
    Bash,后台与nohup
    关于include 和 extern
    python易错点
    android实现点击两次返回键实现退出功能
  • 原文地址:https://www.cnblogs.com/linsu/p/3731504.html
Copyright © 2011-2022 走看看