天天看點

jQuery插件的幾種寫法大總結

插件編寫的目的是給已經有的一系列方法或函數做一個封裝,以便在其他地方重複使用,友善後期維護

通過$.extend()來擴充jquery

通過$.fn 向jquery添加新的方法

通過$.widget()應用jquery ui的部件工廠方式建立

$.extend()相對簡單,一般很少能夠獨立開發複雜插件,僅僅是在jquery命名空間或者了解成jquery身上添加了一個靜态方法而以

我們調用通過$.extend()添加的函數時直接通過$符号調用($.myfunction()),而不需要選中dom元素($('#example').myfunction())

$.widget()是一種進階的開發模式,該模式開發出來的部件帶有很多jquery内建的特性,比如插件的狀态資訊自動儲存,各種關于插件的常用方法等

$.fn則是一般插件開發用到的方式,可以利用jquery強大的選擇器帶來的便利,以及将插件更好地運用于所選擇的元素身上,使用的插件也大多是通過此種方式開發

說明:上面代碼中,通過$.extend()向jquery添加了一個sayhello函數,然後通過$直接調用

基本上就是往$.fn上面添加一個方法,名字是我們的插件名稱。然後我們的插件代碼在這個方法裡面展開

将頁面上所有連結顔色轉成紅色,則可以這樣寫這個插件

1、在插件名字定義的這個函數内部,this指代的是我們在調用該插件時,用jquery選擇器選中的元素,一般是一個jquery類型的集合。在插件名字定義的這個函數内部,this指代的是我們在調用該插件時,用jquery選擇器選中的元素,一般是一個jquery類型的集合

2、如果通過調用jquery的.each()方法處理集合中的每個元素時要注意的是,在each方法内部,this指帶的是普通的dom元素了,如果需要調用jquery的方法那就需要用$來重新包裝一下

jquery一個時常優雅的特性是支援鍊式調用,選擇好dom元素後可以不斷地調用其他方法。要讓插件不打破這種鍊式調用,隻需return一下即可

1、一個強勁的插件是可以讓使用者随意定制的,這要求我們提供在編寫插件時就要考慮得全面些,盡量提供合适的參數

2、比如現在我們不想讓連結隻變成紅色,我們讓插件的使用者自己定義顯示什麼顔色,要做到這一點很友善,隻需要使用者在調用的時候傳入一個參數即可。同時我們在插件的代碼裡面接收

3、為了靈活,使用者可以不傳遞參數,插件裡面會給出參數的預設值

4、在處理插件參數的接收上,通常使用jquery的extend方法,當給extend方法傳遞一個以上的參數時,它會将所有參數對象合并到第一個裡。同時,如果對象中有同名屬性時,合并的時候後面的會覆寫前面的。

5、可以在插件裡定義一個儲存插件參數預設值的對象,同時将接收來的參數對象合并到預設對象上,最後就實作了使用者指定了值的參數使用指定的值,未指定的參數使用插件預設值

6、保護好預設參數:做法是将一個新的空對象做為$.extend的第一個參數,defaults和使用者傳遞的參數對象緊随其後,這樣做的好處是所有值被合并到這個空對象上,保護了插件裡面的預設值

7.執行個體

1、不僅僅是jquery插件的開發,我們在寫任何js代碼時都應該注意的一點是不要污染全局命名空間。因為随着你代碼的增多,如果有意無意在全局範圍内定義一些變量的話,最後很難維護,也容易跟别人寫的代碼有沖突

2、比如你在代碼中向全局window對象添加了一個變量status用于存放狀态,同時頁面中引用了另一個别人寫的庫,也向全局添加了這樣一個同名變量,最後的結果肯定不是你想要的。是以不到萬不得已,一般我們不會将變量定義成全局的

3、可以使用自調用匿名函數包裹插件代碼

這樣可以避免我們将這段代碼放到頁面後,前面别人寫的代碼沒有用分号結尾,這樣,這個插件代碼就會報錯。

1、我們下載下傳的插件裡面,一般都會提供一個壓縮的版本一般在檔案名裡帶個'min'字樣。也就是壓縮後的版本。并且平時我們使用的jquery也是官網提供的壓縮版本,jquery.min.js

2、這裡的壓縮不是指代碼進行功能上的壓縮,而是通過将代碼裡面的變量名,方法函數名等等用更短的名稱來替換,并且删除注釋(如果有的話)删除代碼間的空白及換行所得到的濃縮版本。同時由于代碼裡面的各種名稱都已經被替代,别人無法閱讀和厘清其邏輯,也起到了混淆代碼的作用

在javascript中,沒有真正意義的共有變量、私有變量、常量等概念,當javascript代碼達到一定數量級時,過段時間回頭看自己寫的代碼,會把自己也搞暈的

1、請在私有變量前加“_” 比如: var _pub = this.pub;

2、常量請大寫 比如: this.color = "red";

3、jquery對象變量前加“$” 比如: this.$obj = $("#layout");

4、object、array變量前加“o”、“a”很多人喜歡給數組變量加個”s”,這也是可以的,按個人習慣,如果你覺得有必要還可以給函數前加個“fn”。

1、請多使用data()方法jquery中data()方法非常有用,尤其在jquery插件開發中,因為data()所建立的緩存,可以完整的儲存各種資料類型的資料,這是其他緩存機制無法比拟的

2、請使用bind/on來綁定事件 很多朋友喜歡以下的代碼:

但在jquery插件開發中更提倡使用bind/on:

3、善用typeof判斷資料類型,這個方法在參數判斷中非常有用處

4、插件名加個獨有字首 jquery插件有太多了,插件撞車時很容易的事,比如搜尋框插件:

繼續閱讀