jquery擴展:$.extend()和$.fn.extend()

通過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);
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章