亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

10條建議幫助你創建更好的jQuery插件

2019-11-20 12:27:05
字體:
來源:轉載
供稿:網友

本文總結了幫助你創建更好jQuery插件的10條建議。分享給大家供大家參考。具體說明如下:

在開發過很多 jQuery 插件以后,我慢慢的摸索出了一套開發jQuery插件比較標準的結構和模式。這樣我就可以 copy & paste 大部分的代碼結構,只要專注最主要的邏輯代碼就行了。使用相同的設計模式和架構也讓修復bug或者二次開發更容易。一套經過驗證的架構可以保證我的插件不出大的問題,不論插件簡單還是復雜。我在這里分享10條我總結的經驗。

1. 把你的代碼全部放在閉包里面

這是我用的最多的一條。但是有時候在閉包外面的方法會不能調用。

不過你的插件的代碼只為你自己的插件服務,所以不存在這個問題,你可以把所有的代碼都放在閉包里面。

而方法可能應該放在Prototype方法內部,。

(function($) {    //code here })(jQuery);

2. 提供插件的默認選項

你的插件應該會有一些選項是可以讓開發者設置的,所以提供恢復默認選項是以有必要的。 你可以通過jQuery的extend功能來設置這些選項:

var defaultSettings = {   mode      : 'Pencil',                  lineWidthMin  : '0',                  lineWidthMax  : '10',                  lineWidth    : '2' }; settings = $.extend({}, defaultSettings, settings || {});

3. 使用返回一個元素

JavaScript/jQuery有一個很好的特點就是可以進行方法級聯,所以我們不應該破壞這個特性,始終在方法中返回一個元素。我在我的每一個jQuery插件中都遵守這一條。

$.fn.wPaint = function(settings) {   return this.each(function() {     var elem = $(this);      //run some code here    } }

4. 一次性代碼放在主循環以外

這一條很重要,但是常常被忽略。簡單的講,如果你有一段代碼是一堆默認值,只需要被實例化一次,而不是每次調用你插件功能的時候都實例化,你應該把這段代碼放在插件方法的外面。這樣可以讓你的插件運行的更高效,節省內存。

var defaultSettings = {                 mode      : 'Pencil',                  lineWidthMin  : '0',                  lineWidthMax  : '10',                  lineWidth    : '2' }; settings = $.extend({}, defaultSettings, settings || {});$.fn.wPaint = function(settings) {   return this.each(function() {     var elem = $(this);      //run some code here    } }

你可以注意到,上面代碼中的“defaultSettings”是完全在插件方法外面的,由于這些代碼是在閉包里面,我們不用擔心這些變量被重寫。

5. 為什么要設置 Class Prototyping

作為你代碼的血與肉,方法和函數應該放在prototype函數內。有兩個原因:

◆ 它可以節省很多內存,因為可以不用重復創建這些方法。

◆ 引用一個現成的方法比重新創建一個好快很多。

簡單的說,prototype就是擴展了一個對象,為它提供方法,而不用在每一個對象中實例化這些方法。這也讓你的代碼更有條理和高效。一旦你習慣這種開發方式,你會發現它在你將來的項目中為你節省了很多時間。

6. 如何設置 Class Prototyping

設置一個 prototype 方法有兩個部分。首先我們需要創建我們最初的類定義,在多數情況下這就意味著創建一個對象。這個定義包含了每一個對象實例都不同的部分。在我的Paint jQuery Plugin 插件中,我是這么寫的:

function Canvas(settings) {   this.settings = settings;    this.draw = false;    this.canvas = null;       this.ctx = null;    return this;}

下面來添加全局的方法:

Canvas.prototype = {    generate: function() {     //generate code   } }

這里的關鍵是要讓prototype的方法是通用的,但是數據是每個實例自己的,可以用“this”引用。

7. 使用 “this” 對象

通過使用“$this”,我們可以向別的閉包傳遞正確的引用。我們也可能需要向別的方法傳入 $this 引用。需要注意的是, $this 這個名字是可以改的,任意的變量名都可以。

Canvas.prototype = {   generate: function()  {     //some code      var $this = this;      var buton = //...some code      button.click(function(){     //using this will not be found since it has it's own this        //use $this instead.        $this.someFunc($this);      });   },  someFunc: function($this)   {      //won't know what "this" is.     //use $this instead passed from the click event    } }

8. 在每一個對象中保存設置

我一直在每一個對象中保存自己的設置,然后操作它自己的設置。這樣你就不用在不同的方法中傳遞很多參數。把這些變量放在對象中,也方便你在其他地方調用這些變量。

function Canvas(settings) {   this.settings = settings;    return this; }

9. 分離你的Prototype方法邏輯

這可能是一個基本的原則。當你在猶豫是否需要提供一個方法的時候,你可以問你自己 “如果其他人要重寫這個方法的話,你的代碼是否能滿足他的需求?”或者“別人來寫這個方法有多困難?”。當然這是一個靈活性拿捏的問題。這里列出了我的Color Picker jQuery Plugin 的方法,你可以參考一下:

generate() appendColors() colorSelect() colorHoverOn() colorHoverOff() appendToElement() showPalette() hidePalette()

10. 提供 Setter/Getter 選項

這一條不是必須的,但是我發現我所有的插件都包用到了這一條。因為它只需要一點點代碼,就能為別人提供一個他可能需要的功能。

基本上,我們只要讓開發者能夠設置或者獲取元素已經存在的值:

var lineWidth = $("#container").wPaint("lineWidth"); $("#container").wPaint("lineWidth", "5");

總結:以上十條基本上覆蓋了jQuery插件開發的核心,并且可以作為開發的模板。有一套基本的代碼可以極大的縮短你的開發時間,并且能夠讓你設計插件架構的時候更自信。

希望本文所述對大家的jquery程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
最近2019好看的中文字幕免费| 91在线观看欧美日韩| 国产精品丝袜一区二区三区| 欧美亚洲另类视频| 久久亚洲精品中文字幕冲田杏梨| 国产欧美日韩中文字幕| 97香蕉久久夜色精品国产| 欧美黑人巨大精品一区二区| 色爱av美腿丝袜综合粉嫩av| 在线观看欧美日韩国产| 亚洲毛片在线观看.| 久久久久久18| 国产精品久久久久久久久影视| 亚洲美女av黄| 国产主播喷水一区二区| 亚洲国产女人aaa毛片在线| 亚洲成色777777女色窝| 亚洲欧美激情另类校园| 日韩在线小视频| 久久综合伊人77777蜜臀| 91久久精品国产91性色| 国产精品视频99| 欧洲永久精品大片ww免费漫画| 亚洲网址你懂得| 国产精品美女久久久久av超清| 久久99国产精品自在自在app| 欧美激情网站在线观看| 成人福利网站在线观看| 国产aⅴ夜夜欢一区二区三区| 中文字幕亚洲第一| 中文.日本.精品| 亚洲国产精彩中文乱码av在线播放| 富二代精品短视频| 久久福利网址导航| 欧美国产在线视频| 欧美日韩中文字幕日韩欧美| 亚洲自拍中文字幕| 国产免费一区二区三区在线观看| 亚洲午夜性刺激影院| 日韩精品中文字幕视频在线| 欧美日韩国产一区在线| 超薄丝袜一区二区| 国产成人综合亚洲| 色综合久久久888| 69精品小视频| 97av在线视频免费播放| 欧美精品18videos性欧| www.精品av.com| 国产噜噜噜噜久久久久久久久| 色婷婷综合成人| 91精品国产自产在线老师啪| 欧美日韩激情视频| 亚洲精品免费网站| 亚洲综合小说区| 5566成人精品视频免费| 亚洲色无码播放| 亚洲va欧美va国产综合久久| 亚洲美女av黄| 成人a级免费视频| 亚洲精品中文字幕女同| 亚洲片国产一区一级在线观看| 亚洲电影免费观看高清完整版在线观看| 欧美人交a欧美精品| 日韩成人xxxx| 欧美在线不卡区| 在线视频日本亚洲性| 少妇高潮久久77777| 久久精品国产亚洲精品| 亚洲码在线观看| 亚洲va久久久噜噜噜久久天堂| 97高清免费视频| 国产午夜精品免费一区二区三区| 国产丝袜一区二区三区| 国产精品盗摄久久久| 亚洲黄页网在线观看| 成人xvideos免费视频| 日韩欧亚中文在线| 久久亚洲欧美日韩精品专区| 高跟丝袜一区二区三区| 精品国产区一区二区三区在线观看| 国产精品激情av在线播放| 国产综合在线观看视频| 日韩欧美在线播放| 日韩成人在线视频观看| 日韩电影中文字幕一区| 亚洲激情中文字幕| 51色欧美片视频在线观看| 国产精品最新在线观看| 欧美xxxx18性欧美| 国产精品极品美女在线观看免费| 久久久久久亚洲精品不卡| 精品国产91久久久久久| 57pao国产精品一区| 亚洲尤物视频网| 日韩免费在线观看视频| 欧美日本黄视频| 中文字幕不卡av| 韩国精品美女www爽爽爽视频| 久久久在线观看| 久久成人国产精品| 欧美性猛交xxxx富婆弯腰| 久久久久久久久久久免费精品| 国产一区二区视频在线观看| 国产国语刺激对白av不卡| 欧美日韩美女视频| 欧美激情视频在线免费观看 欧美视频免费一| 色中色综合影院手机版在线观看| 成人福利免费观看| 欧美日韩在线免费观看| 欧美性黄网官网| 国产精品第8页| 日韩电影中文字幕| 欧美性开放视频| 精品在线小视频| 亚洲精品一区久久久久久| 日本午夜在线亚洲.国产| 91天堂在线视频| 69久久夜色精品国产69乱青草| 色综合久综合久久综合久鬼88| 欧美裸体xxxxx| 亚洲影院色无极综合| 久热精品视频在线观看| 亚洲国产精品资源| 欧美日韩国产成人在线观看| 亚洲精品日韩丝袜精品| 91精品国产91久久久久久吃药| 5252色成人免费视频| 亚洲品质视频自拍网| 日本国产精品视频| 一区二区三区亚洲| 亚洲国产精彩中文乱码av| 8x拔播拔播x8国产精品| 成人黄在线观看| 日韩在线视频免费观看| 欧美午夜视频一区二区| 成人欧美一区二区三区在线湿哒哒| 国产成人精品亚洲精品| 亚洲美女动态图120秒| 亚洲精品中文字幕av| 亚洲欧洲国产伦综合| 亚洲男女自偷自拍图片另类| 国产精品久久久久久久7电影| 成人免费淫片aa视频免费| 成人性生交大片免费看小说| 中文字幕日韩欧美在线视频| 黑人巨大精品欧美一区二区| 久久精品国产亚洲7777| 日韩精品中文字幕久久臀| 国产一区二区美女视频| 久久国产精品影视| 97视频在线观看免费| 午夜剧场成人观在线视频免费观看| 日韩电视剧免费观看网站| 中国日韩欧美久久久久久久久| 欧美性猛交xxxx偷拍洗澡| 欧美大成色www永久网站婷| 欧美色道久久88综合亚洲精品| 另类少妇人与禽zozz0性伦| 少妇久久久久久| 国外日韩电影在线观看| 91精品国产综合久久久久久蜜臀| 国产欧美va欧美va香蕉在线| 伊人伊成久久人综合网小说| 韩国精品久久久999|