您的位置:首頁>正文

淺談jquery外掛程式開發模式

首先根據《jQuery高級程式設計》的描述來看, jQuery外掛程式開發方式主要有三種:

通過$.extend來擴展jQuery通過$.fn 向jQuery添加新的方法通過$.widget應用jQuery UI的部件工廠方式創建

第一種比較常見, 我的理解是$.extend相當於一種靜態方法

上述例子狠典型, 而且也列舉了帶參和不帶參的調用, 通過$.extend向jQuery添加了一個sayHello函數, 然後通過$直接調用。 這是最簡單的調用。

第二種是比較常用的, 先來說說第三種

第三種方式是用來開發更高級jQuery部件的, 該模式開發出來的部件帶有很多jQuery內建的特性, 比如外掛程式的狀態資訊自動保存, 各種關於外掛程式的常用方法等等。

他相對於基本的jquery外掛程式來說,

a.方便實現繼承, 代碼重用

b.他的預設模式是單例模式

因為這個模式我不常用, 以後用到了再補充。

重頭戲, 第二種:

他可以處理DOM元素以及將外掛程式更好地運用於所選擇的元素身上

格式 $.fn.pluginName = function{}

最簡潔的寫法

簡單的理解就是

$(‘a’).myPlugin == $(‘a’).css(‘color’,’red’);

但是, 這裡的 this 是對調用該方法的頁面的所有的a標籤所在的這麼一個集合進行操作, 但是這樣的話, 顯然是不合邏輯的, 可以加一個each, 對a集合裡的達到要求的a標籤進行操作

在每個連結顯示連結的真真實位址, 首先通過each遍歷所有a標籤, 然後獲取href屬性的值再加到連結文本後面。

當然還能優化, 在這之前, 說一下鏈式調用

很簡潔的兩個例子, 一目了然瞭解什麼事鏈式調用, 選擇好DOM元素後可以不斷地調用其他方法。

但是之前的寫法, 無法完成鏈式調用, 所以需要優化一下, 要讓外掛程式不打破這種鏈式調用, 只需return一下即可。

之前只是變顏色, 再加上個字體大小

一種調用只是指定顏色, 字體採用預設

但是這麼寫有個缺陷:調用extend時會將defaults的值改變。

這改變我們的初衷了, 我們只是外掛程式的使用者, 不是修改者。

在defaults中加一個空的引用物件即可, 這樣我們傳的參數都會存到這個空物件裡, 保護了外掛程式裡面的預設值。

這時候又遇到問題了, 若要編寫一個複雜的外掛程式, 代碼量會很大, 如何組織代碼就成了一個需要面臨的問題, 沒有一個好的方式來組織這些代碼,

整體感覺會雜亂無章, 同時也不好維護, 所以將外掛程式的所有方法屬性包裝到一個物件上, 用物件導向的思維來進行開發, 無疑會使工作輕鬆很多。

在網上查到了這樣一個例子

1.初始化

2.定義

3.如何調用

通過上面這樣一改造, 我們的代碼變得更物件導向了, 也更好維護和理解,

以後要加新功能新方法, 只需向物件添加新變數及方法即可, 然後在外掛程式裡產生實體後即可調用新添加的東西。

當然,外掛程式的調用是不變的。

但是,現在的問題又來了:

這樣的寫法污染了全域的命名空間.

隨著代碼的增多,如果有意無意在全域範圍內定義一些變數的話,最後很難維護,也容易跟別人寫的代碼有衝突。

比如:

在代碼中向全域window物件添加了一個變數status用於存放狀態,同時頁面中引用了另一個別人寫的庫,也向全域添加了這樣一個同名變數,最後的結果肯定不是我們想要的。

最好的做法是:自調用匿名函數

(function{

//代碼

});

JavaScript中無法用花括弧方便地創建作用域,但函數卻可以形成一個作用域,域內的代碼是無法被外界訪問的。如果我們將自己的代碼放入一個函數中,那麼就不會污染全域命名空間,同時不會和別的代碼衝突。

如上面我們定義了一個Beautifier全域變數,它會被附到全域的window物件上,為了防止這種事情發生,(可能的解決方法:把所有代碼放到jQuery的外掛程式定義代碼裡面去,也就是放到$.fn.myPlugin裡面。)。

但是在$.fn.myPlugin裡面我們其實應該更專注於外掛程式的調用,以及如何與jQuery互動,因為我們不用呢種方法來解決問題。

這裡有一個小問題:

或者是window,undefined等的這些系統變數或者關鍵字改變了,正好我們又在自己的代碼裡面進行了使用.

很簡單,在自己的外掛程式前的 (加上一個;

進階

存取速度,性能的提升:

這樣的做法是將系統變數在局部引用 ----- 有點像 hack的意思.

最終版:

以上就是我對jquery外掛程式開發模式的理解。

最近在看jquery外掛程式的開發,從網上查了好多資料,特此記錄一下,僅作學習使用,因為查詢了許多前輩的資料,有些是直接複製過來的,如果作者本人覺得侵權了,請通知我刪除,謝謝。

本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。

當然,外掛程式的調用是不變的。

但是,現在的問題又來了:

這樣的寫法污染了全域的命名空間.

隨著代碼的增多,如果有意無意在全域範圍內定義一些變數的話,最後很難維護,也容易跟別人寫的代碼有衝突。

比如:

在代碼中向全域window物件添加了一個變數status用於存放狀態,同時頁面中引用了另一個別人寫的庫,也向全域添加了這樣一個同名變數,最後的結果肯定不是我們想要的。

最好的做法是:自調用匿名函數

(function{

//代碼

});

JavaScript中無法用花括弧方便地創建作用域,但函數卻可以形成一個作用域,域內的代碼是無法被外界訪問的。如果我們將自己的代碼放入一個函數中,那麼就不會污染全域命名空間,同時不會和別的代碼衝突。

如上面我們定義了一個Beautifier全域變數,它會被附到全域的window物件上,為了防止這種事情發生,(可能的解決方法:把所有代碼放到jQuery的外掛程式定義代碼裡面去,也就是放到$.fn.myPlugin裡面。)。

但是在$.fn.myPlugin裡面我們其實應該更專注於外掛程式的調用,以及如何與jQuery互動,因為我們不用呢種方法來解決問題。

這裡有一個小問題:

或者是window,undefined等的這些系統變數或者關鍵字改變了,正好我們又在自己的代碼裡面進行了使用.

很簡單,在自己的外掛程式前的 (加上一個;

進階

存取速度,性能的提升:

這樣的做法是將系統變數在局部引用 ----- 有點像 hack的意思.

最終版:

以上就是我對jquery外掛程式開發模式的理解。

最近在看jquery外掛程式的開發,從網上查了好多資料,特此記錄一下,僅作學習使用,因為查詢了許多前輩的資料,有些是直接複製過來的,如果作者本人覺得侵權了,請通知我刪除,謝謝。

本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。

同類文章
Next Article
喜欢就按个赞吧!!!
点击关闭提示