通過jquery的擴展,我們可以靈活的使用jquery,來寫一些自定義插件,豐富自己代碼的功能。
jquery的擴展可以分爲兩個部分:類的擴展和對象的擴展。
jquery類的擴展:$.extend()
使用jQuery.extend()可以對jQuery類添加靜態屬性和方法,這些添加的屬性和方法,都是通過類
來進行訪問的。例如:$.ajax(),這個就是一個靜態的方法。
寫法1:
jQuery.foo = function(){ alert("foo"); };
寫法2:
$.extend.foo = function(){ alert("foo"); };
寫法3:
$.extend = {
foo:function(){
alert("foo");
}
}
以上三種方式都是等價的,爲jQuery類添加一個foo()的靜態方法,我們可以在代碼中這樣調用:
$.foo();
$.extend()還有一種用法,用於擴展對象:
var options = jQuery.extend(deep,target,src1,src2);
其中:deep是boolean值,如果deep爲true,則進行深度擴展。這個函數返回值options,就是target和src1,src2三個對象合併後的對象。
var options = $.extend({aa:1,bb:2},{cc:3,bb:4},{ee:5});
//{aa:1,bb:4,cc:3,ee:5}
var options = $.extend(true,{aa:1,bb:{aaa:1,bbb:2}},{cc:1,dd:2},{bb:{aaa:4,ccc:5},cc:2});
//{aa:1,bb{aaa:4,bbb:2,ccc:5},cc:2,dd:2}
如果不想修改原來的對象,產生一個新對象,那麼可以將target設爲{}空對象,就可以返回一個新的對象
var options = $.extend({},src1,src2);
var options = $.extend({},{aa:1},{bb:2});
//{aa:1,bb:2}
jQuery實例對象的擴展:jQuery.fn.extend()
在jquery源碼中我們看到:jQuery.fn = jQuery.prototype = {…}
所以,使用jQuery.fn定義的屬性方法都可以在jquery實例化對象上使用。
$.fn.showName = function(){
alert("I will show this name!!");
};
調用:
$(selector).showName();//I will show this name!!
在jQuery.fn定義的方法中,是允許使用jquery方法的,原生js在這裏暫不被支持。
$.fn.check = function(){
this.each(function(){
var _this = $(this);
_this.attr("checked","checked");
});
}
一般情況下,爲了防止與源代碼中prototype的衝突,避免污染環境,通常將新寫的jquery擴展放到立即執行函數中。
(function($){
$.extend = {
foo:function(){ alert("foo"); }
};
$.fn.extend.showName = function(){
alert("I will show this name");
};
})(jQuery);