jQuery的对象拷贝,你了解多少?

当我们要使用的对象要用到其他对象的内容,这时就需要使用对象拷贝了。

语法:$.extend([deep], target, Obj1[,ObjN])

deep:如果设 true 为深拷贝,那么 默认 false 就是浅拷贝
target:要拷贝的目标对象
Obj:代拷贝的对象

接下来给大家详细介绍一下

  1. 浅拷贝
    1.1一个对象为空,另一个不为空
var targetObj = {};
var Obj = {
    id: 1,
    name: 'Ross'
}
$.extend(targetObj, Obj);
console.log(targetObj);
console.log(Obj);

输出结果
拷贝结果是:两个对象内容完全一样

1.2 两个对象都非空,而且有一个属性完全相同

var targetObj = {
	id: 4
};
var Obj = {
    id: 1,
    name: 'Ross'
}
$.extend(targetObj, Obj);
console.log(targetObj);
console.log(Obj);

输出结果
拷贝结果跟第一种一样,这就说明如果属性相同,那么就会被覆盖
1.3 被拷贝对象里面有复杂数据类型

var targetObj = {
	  id: 4
};
var Obj = {
	  id: 1,
	  name: 'Ross',
	  lxc: {
	      sex: 'boy'
	  }
}
$.extend(targetObj, Obj);
console.log(targetObj);
console.log(Obj);

输出结果
能把简单数据类型和复杂数据类型都拷贝了

但是对于复杂数据类型来说,是深拷贝还是浅拷贝,换句话说,是拷贝的对象 lxc 的地址,还是把 lxc 对象拷贝了

targetObj.lxc.sex = 'gril';

然后再输出一下结果是怎样呢?
输出结果
可以看出:修改一个对象的值,这两个对象的值都被改变了。可以说明拷贝的是复杂数据类型 (对象lxc) 的地址。

浅拷贝把原来对象里面的复杂数据类型地址拷贝给目标对象

  1. 深拷贝
var targetObj = {
    id: 4
};
var Obj = {
    id: 1,
    name: 'Ross',
    lxc: {
        sex: 'boy'
    }
}
$.extend( true,targetObj, Obj);
console.log(targetObj);
console.log(Obj);

拷贝结果
在这种情况下,看不出任何端倪,所以我们再修改一下

targetObj.lxc.sex = 'gril';

输出结果
可以看出,修改对象 targetObj ,下面的对象内容没有改变。深拷贝也会覆盖相同元素,被拷贝的对象元素覆盖拷贝对象元素

深拷贝把里面的数据完全复制一份给目标对象 如果里面有不冲突的属性,会合并到一起

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值