我们在处理插件参数的接收上,经常使用的是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" } }