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. 否则,直接复制属性。

 

posted on 2018-10-17 16:32  pu20065226  阅读(760)  评论(0编辑  收藏  举报