我们在处理插件参数的接收上,经常使用的是jQuery()方法。extend方法传递单个对象的情况下,这个对象会合并到jQuery身上,而extend方法传递一个及一个以上的参数时,他会将所有的参数合并到第一个参数里去。
注意:如果对象中有同名属性时,合并的时候,后面会覆盖前面的。类似于java中的重写(是类似,不是重写)。
1. jQuery扩展方法原型
<1>extend(dest, src1, src2, src3)
这个函数的作用是将src1、src2、src3合并到dest中,返回值为合并后的dest。这个方法改变了dest的结构。
<2>var newSrc = $.extend({}, src1, src2, src3)
这个方法是为了解决我们有时候需要将src1、src2和src3合并起来,但却又不想改变dest结构的需求。我们直接将一个空对象{}看做dest,然后将得到的结果赋给newSrc。
2. 省略dest参数
通常情况下,我们的dest参数可以被省略掉。如果省略了dest参数,那么extend方法就只能有一个参数,其函数的作用是将src合并到调用extend方法的对象中(也被称为extend原型对象)去。
<1>$.extend(src)
该方法就是将src合并到jQuery的全局对象中(类似静态方法)。
<2>$.fn.extend(src)
该方法就是将src合并到jQuery的实例对象中去。
<3>$.extend({
net:{}
});
该方法的作用是在jQuery全局对象中扩展一个net命名空间。
<4>$.extend($.net,{
hello:function(){alert(‘hello’);}
})
该方法的作用是将hello方法扩展到之前扩展的jQuery的net命名空间中去。
3. extend方法的重载原型
$.extend(boolean, dest, src1, src2, src3, …)
第一个参数boolean决定是否进行深层拷贝,其余的参数与之前介绍的功能一样。
//举例:
var result=$.extend(
boolean,
{},
{name:"John", location: {city: "Boston",county:"USA"} },
{last: "Resig", location: {state: "MA",county:"China"} }
);
//如果boolean为true,是深层拷贝,那么result的结果为
result={
name:"John",
last:"Resig",
location:{
city:"Boston",
state:"MA",
county:"China",
}
}
//如果boolean为false,是浅拷贝,那么result的结果为
result={
name:"John",
last:"Resig",
loaction:{
state:"MA",
county:"China"
}
}