近来在看一些jQuery的插件源码,发现了jQuery.extend()和jQuery.fn.extend()两个要领在插件中用到的频次异常高,在网上查询了下,说的要么是不清楚,要么就是不好明白。基于此,我写下自身的一些看些,愿望人人斧正。在JS中并没有类的观点,不过为了好诠释或者是思想上的一致。我权且把jQuery看成了一个类,轻易明白。
jQuery.extend(),是扩大的jQuery这个类。
假定我们把jQuery这个类看成是人类,能用饭能喝水能跑能跳,如今我们用jQuery.extend这个要领给这个类拓展一个能唱歌的妙技。如许的话,不论是男子,女人,xx人…..等能继续这个妙技(要领)了。
jQuery.extend({
test:function(){
alert("我是测试~");
}
});
$.test(); //弹出alert。test表明是jQuery的一个静态要领了。
这个扩大也就是所谓的静态要领。只跟这个类(jQuery)自身有关。跟你详细的实例化对象$(“#ID”)是没紧要滴。
Jquery的扩大要领原型是:
extend(dest,src1,src2,src3...);
它的寄义是将src1,src2,src3…兼并到dest中,返回值为兼并后的dest,由此能够看出该要领兼并后,是修正了dest的构造的。假如想要获得兼并的效果却又不想修正dest的构造,能够以下运用:
var newSrc=$.extend({},src1,src2,src3...)//也就是将"{}"作为dest参数。
如许就能够将src1,src2,src3…举行兼并,然后将兼并效果返回给newSrc了。以下例:
var result=$.extend({},{name:"Tom",age:21},{name:"Jerry",sex:"Boy"})
那末兼并后的效果
result={name:"Jerry",age:21,sex:"Boy"}
也就是说背面的参数假如和前面的参数存在雷同的称号,那末背面的会掩盖前面的参数值。
省略dest参数
上述的extend要领原型中的dest参数是能够省略的,假如省略了,则该要领就只能有一个src参数,而且是将该src兼并到挪用extend要领的对象中去,如:
1、$.extend(src)
该要领就是将src兼并到jquery的全局对象中去,如:
$.extend({
hello:function(){alert('hello');}
});
就是将hello要领兼并到jquery的全局对象中。
jQuery.fn.extend(),是扩大的jQuery这个类的对象。
说白了就是得这么用(假定xyz()是拓展的要领):
$(‘selector’).xyz();
你如果这么用$.xyz();是会出毛病滴。
(function($){
$.fn.extend({
xyz:function(){
alert("我是测试对象的~~~");
}
});
})(jQuery);
$("#ID").xyz(); //弹出alert,内容“我是测试对象的~~~”
总结,jQuery.extend()这个要领,主如果用来拓展个全局函数啦,比方$.ajax()这类,要不就是拓展个选择器啦,比方$.fn.each(),中选择器用。
大部分插件都是用jQuery.fn.extend()。
附:Jquery的extend要领另有一个重载原型:
extend(boolean,dest,src1,src2,src3...)
第一个参数boolean代表是不是举行深度拷贝,其他参数和前面引见的一致,什么叫深层拷贝,我们看一个例子:
var result=$.extend( true, {},
{ name: "John", location: {city: "Boston",county:"USA"} },
{ last: "Resig", location: {state: "MA",county:"China"} } );
我们能够看出src1中嵌套子对象location:{city:”Boston”},src2中也嵌套子对象location:{state:”MA”},第一个深度拷贝参数为true,那末兼并后的效果就是:
result={name:"John",last:"Resig",
location:{city:"Boston",state:"MA",county:"China"}}
也就是说它会将src中的嵌套子对象也举行兼并,而假如第一个参数boolean为false,我们看看兼并的效果是什么,以下:
var result=$.extend( false, {},
{ name: "John", location:{city: "Boston",county:"USA"} },
{ last: "Resig", location: {state: "MA",county:"China"} }
);
那末兼并后的效果就是:
result={name:"John",last:"Resig",location:{state:"MA",county:"China"}}
以上就是$.extend()在项目中经常会运用到的一些细节。
更多资本上:去转盘网,若有兴致能够加我的Q群一同议论进修js,css,Python爬虫等手艺。(QQ群:512245829)