天天看點

Jquery插件開發

      直到最近寫一個小功能的時候靈機一動,才想起來嘗試着寫很早以前就想進行的插件開發。更郁悶的是,直到寫插件的時候,才深刻的明白什麼叫面向對象!(不知道都怎麼想的,我在qq空間裡發這句話的時候大家都評論,“脫單了?”“有對象了?”更有甚者,"我明白,程式員的對象就是代碼",此言到是不虛。)

      參考了很多網上資料,然後對比,最後還是參照劉哇勇的部落格(http://www.cnblogs.com/Wayou/p/jquery_plugin_tutorial.html)弄的第一個簡單插件,這裡記錄一下完整的插件格式和相關注釋,友善快速開發,分享就是快樂嘛。

---------------------------------------------------------------------- 2015-07-27 ---------------------------------------------------------------------------

  每過一段時間回頭看自己寫的東西,都覺得之前的有問題。。。現在補充一下。

  實際采用的是組合使用構造函數模式和原型模式。

//這裡可以以注釋的形式寫上版本号,插件用途,版權,插件使用格式等等等等

//加上 ; 能防止前面代碼沒有 ; 結尾的後果,無懼壓縮。如果用jsFormat格式化後;會在上面一行,jsHint會不通過,移下來就行了 
;(function($,window,document,undefined){ //undefinde是真實的undefined,因為傳入時并沒有傳

    //定義構造函數(對象)
    var Datalist=function(ele,opt){

     //構造函數的屬性或方法,每個執行個體均擁有副本
        this.$element=ele;
        this.defaults={ //定義預設屬性
            '預設屬性名':'對應屬性值'
        };
        this.options=$.extend({}, this.defaults, opt); //在使用的時候會自動執行$.extend()函數,讓使用者自定的屬性值覆寫default裡面預設的屬性值。前面加上{}空對象是為了防止多次調用時前面的屬性值修改了預設屬性值,詳情見對象的深複制一章

    };   //所有以字面量指派形式的函數,不要忘了;

    //在原型上定義方法,供所有的執行個體調用
    Datalist.prototype={ //注意,這是以對象字面量形式建立的新對象,constructor屬性不再指向Datalist,詳情見深複制與對象一文中的原型模式

        showList:function(){        
            var color=this.options.bgcolor; //值的傳遞形式(最好這裡把需要的全部取出來,畢竟在不同環境下this的指代不一樣)
        
       //這裡是具體的實作過程書寫區域

            return this; //return是為了不破壞jquery鍊式調用的特點(注意return的對象是原對象),也可以以傳回值的形式回調一個函數
        },
     showList2:function(){
       //...
     }
    };

    //将方法添加到jquery對象的原型上
    $.fn.myDatalist=function(options){

        //建立執行個體
        var datalist=new Datalist(this,options);

        //以傳回值調用的形式調用其方法
        return datalist.showList();
    };
 
})(jQuery,window,document); //其實就是 (function(){}());的閉包形式,定義匿名函數并立即調用,裡面的事件綁定什麼的就像在全局定義一樣的可以用(頁面關閉的時候才銷毀),但是全局空間裡面是不可見不可取得的


      
//在需要的地方調用插件
      
$(document).ready(function(){
   $(object).myDatalist({"屬性名":"屬性值"}); //沒有設定的屬性會用預設值
});      

      具體的執行個體可以參見myBoxScroll。github:https://github.com/codetker/myBoxScroll。線上示範:http://www.夢萦無雙.xyz/myBoxScroll/Default.html。

      接下來是我改寫的常用插件(以前都是面向過程,用一次寫一次。。。),希望能幫上和我一樣的菜鳥咯。