1. 程式人生 > >如何自己開發一款js或者jquery外掛

如何自己開發一款js或者jquery外掛

引子

現在網上關於js和jquery封裝的外掛很多,我剛剛接觸前端的時候,就很敬佩那些自己寫外掛的大牛們!因為是他們給網站開發更多的便利,很多網頁效果,網上很多現成的外掛!那麼這些外掛是如何寫的呢?首先是有紮實的js和jquery技術基礎,其次還有一些寫外掛的方法和技巧。關於js和jquery的技術基礎,那是一個慢慢積累的過程。但是關於寫外掛的一些注意和技巧,本文可以略微介紹一下,方便以後寫外掛的時候用得到。

jquery外掛開發模式

jquery外掛一般有三種開發方式:

通過$.extend()來擴充套件jQuery
通過$.fn jQuery新增新的方法通過$.widget()應用jQuery UI
的部件工廠方式建立

第一種$.extend()相對簡單,一般很少能夠獨立開發複雜外掛,第三種是一種高階的開發模式,本文也不做介紹。第二種則是一般外掛開發用到的方式,本文著重講講第二種。

外掛開發

第二種外掛開發方式一般是如下定義

$.fn.pluginName =function(){//your code here}

外掛開發,我們一般運用面向物件的思維方式

例如定義一個物件

varHaorooms=function(el, opt){this.$element = el,this.defaults ={'color':'red','fontSize':'12px','textDecoration'
:'none'},this.options = $.extend({},this.defaults, opt)}//定義haorooms的方法 haorooms.prototype ={ changecss:function(){returnthis.$element.css({'color':this.options.color,'fontSize':this.options.fontSize,'textDecoration':this.options.textDecoration });}}

$.extend({}, this.defaults, opt)有{}主要是為了建立一個新物件,保留物件的預設值。

$.fn.myPlugin =function(options){//建立haorooms的實體var haorooms=newHaorooms(this, options);//呼叫其方法returnHaorooms.changecss();}

呼叫這個外掛直接如下就可以

$(function(){
    $('a').myPlugin({'color':'#2C9929','fontSize':'20px'});})

上述開發方法的問題

上面的開發方法存在一個嚴重的問題,就是定義了一個全域性的Haorooms,這樣對於外掛的相容等等各個方面都不好。萬一別的地方用到了Haorooms,那麼你的程式碼就悲催了!現在我們把上面的程式碼包裝起來,用一個自呼叫匿名函式(有時又叫塊級作用域或者私有作用域)包裹,就不會出現這個問題了!包括js外掛的開發,也是一樣的,我們用一個自呼叫匿名函式把自己寫的程式碼包裹起來,就可以了!包裹方法如下:

(function(){})()

用上面的這個包裹起來,就可以了。

但是還有一個問題,當我們研究大牛的程式碼的時候,前面經常看到有“;”,那是為了避免程式碼合併等不必要的錯誤。

例如,我們隨便定義一個函式:

var haoroomsblog=function(){}(function(){})()

由於haoroomsblog這個函式後面沒有加分號,導致程式碼出錯,為了避免這類情況的發生,通常這麼寫!

;(function(){})()

把你的外掛程式碼包裹在上面裡面,就是一個簡單的外掛了。(注js外掛和jquery外掛都是如此)

還有一個問題

把你的外掛包裹在

;(function(){})()

基本上可以說是完美了。但是為了讓你開發的外掛應用更加廣泛,相容性更加好,還要考慮到用外掛的人的一些特殊的做法,例如,有些朋友為了避免jquery和zeptojs衝突,將jquery的字首“$”,修改為“jQuery”,還有些朋友將預設的document等方法修改。為了讓你的外掛在這些東西修了了的情況下照常執行,那麼我們的做法是,把程式碼包裹在如下里面:

;(function($,window,document,undefined){//我們的程式碼。。})(jQuery,window,document);

就可以避免上面的一些情況了!

至此,你開發的外掛就算完美了!