一、什么是extend?
jQuery用于将一个或多个参数的内容合并到目标对象。 如果多个对象具有相同的属性,则后者会覆盖前者的属性值。
语法:
二、为什么要使用extend?
这就要说到赋值(=)与拷贝的区别。
用等于的话:var object1= object2; 当改变object1对象的时候 object2的对象会随之改变,因为它们的引用指向的是同一个内存地址。而我需要的是object对象的改变不影响object2,所以采用$.extend()拷贝的方法。这种方式相当于在内存又开辟了个新空间,object1与object2的引用指向的内存地址是不相同的。
三、如何使用?
如上文语法所述,extend有两种用法。
1、$.extend( target [, object1 ] [, objectN ] )
这种写法相当于把多个object对象合并到target中。举例下:
执行的结果是:{"apple":{"price":300},"durian":150}
这种写法相当于: object1 = $.extend({}, object2); 两个写法的效果一样。
2.$.extend( [deep ], target, object1 [, objectN ] )
那这个deep有啥子作用?如下图
警告: 不支持第一个参数传递 false 。
deep为false的时候和$.extend( target [, object1 ] [, objectN ] )的作用是不同的。举例下:
2.1、 deep为空输出object1
2.2、deep为false,输出object1(官方文档不支持的写法)
2.3、deep为true,输出object1
注意到2.2 和2.3的remark属性,如果deep是true的时候,执行的是深拷贝,会把remark里面的不同属性值也都拷贝进来。比如这里就把 weight也给拷贝进来了,而原来的place则被覆盖,color得以保留。如果deep是false的时候,执行的结果明显有问题,建议不适用该方式。再看2.1:deep不写的情况,object2的remark会直接覆盖object1的remark而不在意remark属性里面的属性是否相同或不同。
注:看别的博文还有另一种的使用方式,由于没接触到,所以不写了 以免误导。方式如下图:
参考资料: