zoukankan      html  css  js  c++  java
  • js对象及元素复制拷贝

    1.数组及对象拷贝:

    浅拷贝var b=$.extend(false,{},a);//对象浅拷贝

    var a={aa:111,bb:{bb1:22}};
    var b=$.extend(false,{},a)
    JSON.stringify(a);
    "{"aa":111,"bb":{"bb1":22}}"
    JSON.stringify(b);
    "{"aa":111,"bb":{"bb1":22}}"
    b.bb.bb1=3300;
    JSON.stringify(b);
    "{"aa":111,"bb":{"bb1":3300}}"
    JSON.stringify(a);
    "{"aa":111,"bb":{"bb1":3300}}"

    深拷贝:var b=$.extend(true,{},a);//对象深拷贝

    var a={aa:111,bb:{bb1:22}};
    var b=$.extend(true,{},a)
    JSON.stringify(a);
    "{"aa":111,"bb":{"bb1":22}}"
    JSON.stringify(b);
    "{"aa":111,"bb":{"bb1":22}}"
    b.bb.bb1=10000;
    10000
    JSON.stringify(a);
    "{"aa":111,"bb":{"bb1":22}}"
    JSON.stringify(b);
    "{"aa":111,"bb":{"bb1":10000}}"


    对象合并:$.extend(a,b);

    var a={aa:111,bb:222};
    var b={bb:333,cc:444};
    var res=$.extend(a,b);
    JSON.stringify(a)
    "{"aa":111,"bb":333,"cc":444}"
    JSON.stringify(b)
    "{"bb":333,"cc":444}"
    JSON.stringify(res)
    "{"aa":111,"bb":333,"cc":444}"

    2.元素拷贝
    var tr=th.clone();

    tr.find("th").children().remove();不影响th

    3.实现原理

     $ = { //浅拷贝 
          extend : function(target, options) { 
             for (name in options) { 
                 target[name] = options[name]; 
             } 
             return target; 
         } 
      };  
         
     $ = {  //深拷贝
         extend : function(deep, target, options) { 
             for (name in options) { 
                 copy = options[name]; 
                 if (deep && copy instanceof Array) { 
                     target[name] = $.extend(deep, [], copy); 
                 } else if (deep && copy instanceof Object) { 
                     target[name] = $.extend(deep, {}, copy); 
                 } else { 
                    target[name] = options[name]; 
                } 
            } 
            return target; 
       } 
    };

    具体分为三种情况:

      a. 属性是数组时,则将target[name]初始化为空数组,然后递归调用extend;

      b. 属性是对象时,则将target[name]初始化为空对象,然后递归调用extend;

      c. 否则,直接复制属性。

  • 相关阅读:
    使用secureCRT连接VMware-Ubuntukylin虚拟机
    java使用POI jar包读写xls文件
    SimpleDateFormat 相关用法
    ORACLE之表
    ORACLE之PACKAGE-游标变量
    PHP多进程学习(三)__代码案例来了解父进程与子进程的执行顺序
    PHP多进程学习(二)__fork起多个子进程,父进程的阻塞与非阻塞
    PHP多进程学习(二)__来初步了解一下PHP多进程及简单demo
    Python学习【三】
    Python学习【二】
  • 原文地址:https://www.cnblogs.com/pu20065226/p/9805015.html
Copyright © 2011-2022 走看看