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

 

转载于:https://www.cnblogs.com/pu20065226/p/9805015.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值