$.extend用法详解(一)
jQuery.extend( target [, object1 ] [, objectN ] )
在这里target是Object,它有两个作用:
1. 如果后面没有对应的object1及objectN等等,它的作用就是给jQuery命名空间本身对象进行扩展,可以为jQuery增加新的共用方法和属性。
2.存在object1,及objectN等等,object1,objct2,...objectN会合并到target中,返回值为合并后的target,由此可以看出该方法合并后,是修改了target的结构的。
如果不想修改原始对象的结构,可以创建target为空对象,将后面的对象属性合并到target中,然后返回给新的object中:

同时,如果后面的参数如果和前面的参数存在相同的名称,那么后面的会覆盖前面的参数值。
demo如下:
var obj1 = {
apple:,
banana:{
weight:,price:
},
cherry:
}
var obj2 = {
banana:{price:},
durian:
}
var obj = $.extend(obj1,obj2);
console.log("obj1为",obj1);
console.log("obj为",obj);
输出:
由此可知,obj1的被修改,和obj都指向同一个对象,并且,参数相同的话,后面对象会覆盖前面。
var obj = $.extend({},obj1,obj2);
console.log(obj);
这个obj也指向了同一个对象。

二,jQuery.extend( [deep ], target, object1 [, objectN ] )
在这里第一个参数deep代表是否进行深度拷贝,有两个参数true和false。
下面看官网的例子:
var object1 = {
apple: 0,
banana: { weight: 52, price: 100 },
cherry: 97
};
var object2 = {
banana: { price: 200 },
durian: 100
};
// Merge object2 into object1, recursively
var obj = $.extend( true, object1, object2 );
console.log("object1:",object1);
console.log("obj:",obj);
输出:

深拷贝,也就是说它会将object中的嵌套子对象也进行合并。
如果参数为false的话,代码如下:
var obj = $.extend(false, object1, object2 );
console.log("object1:",object1);
console.log("obj:",obj);
输出如下:
输出:
由此可知,false的话object1对象还是原来的结构,没有合并;得到的结果obj则是object1和object2的浅复制。
下面在看两个小例子:
<script>
var result=$.extend( true, {},
{ name: "John", location: {city: "Boston",county:"USA"} },
{ last: "Resig", location: {state: "MA",county:"China"} } );
console.log(result); </script>
输出结果如下:

<script>
var result=$.extend( false, {},
{ name: "John", location: {city: "Boston",county:"USA"} },
{ last: "Resig", location: {state: "MA",county:"China"} } );
console.log(result); </script>
输出如下:

随机推荐
- HZOI 可怜与超市 树形dp
学长留的题,质量还是灰常高的. 而且我树规本身较弱,一道也不想放下 题目链接:https://www.cnblogs.com/Juve/articles/11203824.html 题解:这道题我们可 ...
- LUOGU P3960 列队 (noip2017 day2T3)
传送门 解题思路 记得当时考试我还是个孩子,啥也不会QAQ.现在回头写,用动态开点的线段树,在每行和最后一列开线段树,然后对于每次询问,把x行y列的删去,然后再把x行m列的元素加入x行这个线段树,然后 ...
- Delphi 设计模式:《HeadFirst设计模式》Delphi7代码---模板方法模式之CoffeineBeverageWithHook[转]
模板方法模式定义了一个算法骨架,允许子类对算法的某个或某些步骤进行重写(override). 1 2{<HeadFirst设计模式>之模板方法模式 } 3{ 编译工具: Del ...
- etcd 研究研究
先记录参考信息:etcd 场景https://blog.csdn.net/bbwangj/article/details/82584988 etcd 集群部署https://www.jianshu.c ...
- DVWA 之high级别sql注入
Sqlmap 高级注入,抓包,然后保存数据到1.txt 1.判断注入点 sqlmap -r /root/1.txt -p id --second-order "ht ...
- 关于使用注解设置token免拦截 和 必要 的权限拦截
先说一下这样子做的原理:将某一个注解配置在方法头部,在spring实例化的时候会将注解以切面的形式注入给方法,在拦截的地方判断当前方法有没有注入指定的注解类. 1.先声明一个注解类(类中不需要做任何逻 ...
- 安装springsource-tool-suite插件成功之后找不到spring的处理办法
最近学习spring,安装springsource-tool-suite插件,成功之后,在help-installation details里面可以找到安装的spring插件,却在window-pre ...
- 跟我一起写一个chrome扩展程序
在我没有看这本书之前,我都想象不到,原来chrome扩展程序可以这样写,真的非常有意思. 就是用最简单最基础的代码,然后就实现了一些非常有意思的玩意儿. 先看效果图 实际运用要和现实联系在一起,经历和 ...
- 20190922-雅礼Day2
先送大家几个变量名: 具体的可以去$C++ \ Reference$里看(本页 右侧/下侧 有链接) 或者等一下奇迹银桥第三氮 const int c; mutable int a; volatile ...
- SpringBoot随机数
# 随机字符串 com.didispace.blog.value=${random.value} # 随机int com.didispace.blog.number=${random.int} # 随 ...