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

首頁 > 編程 > JavaScript > 正文

jQuery使用經驗小技巧(推薦)

2019-11-20 09:50:29
字體:
來源:轉載
供稿:網友

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

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

這是我用的最多的一條。但是有時候在閉包外面的方法會不能調用。不過你的插件的代碼只為你自己的插件服務,所以不存在這個問題,你可以把所有的代碼都放在閉包里面。而方法可能應該放在Prototype方法內部,我們后面會講到這一點。

/* 武林網 www.49028c.com */(function($)   {   //code here   })(jQuery); 

2. 提供插件的默認選項

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

/* 武林網 www.49028c.com */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  武林網 www.49028c.com  }  }

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

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

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

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

 5. 為什么要設置 Class Prototyping

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

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

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

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

 6. 如何設置 Class Prototyping

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

/* 武林網 www.49028c.com */function Canvas(settings)  {    this.settings = settings;    this.draw = false;    this.canvas = null;       this.ctx = null;      return this;  }

下面來添加全局的方法:

/* 武林網 www.49028c.com */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    }  }  /* 武林網 www.49028c.com */

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 選項

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

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

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

首先我們要把元素和對象關聯起來,然后我們就可以引用它。我們在返回元素之前做如下操作:

return this.each(function()  {    var elem = $(this);      var canvas = new Canvas(settings);      //run some code here      elem.data("_wPaint_canvas", canvas);  }  //下面的代碼明確了我們究竟要做什么:  $.fn.wPaint = function(option, settings)  {    if(typeof option === 'object')    {      settings = option;    }    else if(typeof option === 'string')    {      if(        this.data('_wPaint_canvas') &&        defaultSettings[option] !== undefined      ){        var canvas = this.data('_wPaint_canvas');          if(settings)        {          canvas.settings[option] = settings;         return true;        }        else       {          return canvas.settings[option];        }      }      else       return false;    }      return this.each(function()    {      //run some code here    }  }  /* 武林網 www.49028c.com */

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

以上這篇jQuery使用經驗小技巧(推薦)就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲第一av网| 久久久久久久久久久久av| 91欧美精品午夜性色福利在线| 国产精品久久av| 欧美黑人极品猛少妇色xxxxx| 国产成人精品免费久久久久| 中文字幕九色91在线| 国模精品视频一区二区| 98精品在线视频| 欧美日韩成人免费| 亚洲电影免费观看高清完整版在线| 欧美激情国产精品| 成人在线观看视频网站| 国产精品一区二区三区成人| 欧美富婆性猛交| 国产在线视频2019最新视频| 国产日韩综合一区二区性色av| 中文字幕亚洲欧美在线| 欧美激情精品久久久| 亚洲免费高清视频| 亚洲aⅴ日韩av电影在线观看| 国产精品久久久久久久天堂| 亚洲精品一区二区在线| 欧美性xxxx18| 欧美最猛性xxxxx(亚洲精品)| 欧美成人精品一区| 欧美高清视频在线| 国产狼人综合免费视频| 欧美激情videos| 亚洲91av视频| 九九九久久国产免费| 在线观看中文字幕亚洲| 九色成人免费视频| 欧洲亚洲免费视频| 97香蕉超级碰碰久久免费软件| 日韩欧美大尺度| 日韩在线免费高清视频| 美女少妇精品视频| 日本精品视频网站| 久久夜色精品国产欧美乱| 欧美性极品少妇精品网站| 亚洲国产精品成人va在线观看| 日韩中文字幕在线看| 亚洲999一在线观看www| 欧美黄色三级网站| 韩国欧美亚洲国产| 欧美肥臀大乳一区二区免费视频| 日本一区二区不卡| 亚洲在线视频福利| 日韩中文字幕视频在线| 国产精品日韩在线一区| 欧美午夜视频在线观看| 亚洲va电影大全| 7777免费精品视频| 久久久精品国产网站| 亚洲视频在线看| 久久精品视频网站| 在线观看国产精品淫| 亚洲性av在线| 久久久久北条麻妃免费看| 国产精品免费观看在线| 一本大道久久加勒比香蕉| 福利一区福利二区微拍刺激| 福利视频导航一区| 91美女高潮出水| 日韩电影免费在线观看中文字幕| 日本精品久久久久影院| 国产日韩欧美成人| 国产精品久久网| 77777亚洲午夜久久多人| 亚洲自拍偷拍色片视频| 欧美午夜激情在线| 日本一区二区三区四区视频| 欧美在线视频免费| 91在线免费网站| 欧美性猛xxx| 欧美限制级电影在线观看| 97国产精品免费视频| 2019中文字幕免费视频| 国内揄拍国内精品| 欧美黑人性生活视频| 最近中文字幕日韩精品| 国产在线精品自拍| 亚洲另类xxxx| 国产欧美亚洲视频| 久久精品国产亚洲精品| 成人a级免费视频| 亚洲精品久久在线| 狠狠躁夜夜躁人人躁婷婷91| 国产福利视频一区二区| 国产成人精彩在线视频九色| 国产精品视频免费在线观看| 欧美成人精品xxx| 国产精品伦子伦免费视频| 国产日韩av在线播放| 国产精品99久久久久久www| 日韩av黄色在线观看| 欧美一级bbbbb性bbbb喷潮片| 国产97在线|亚洲| 亚洲人午夜精品| 久久理论片午夜琪琪电影网| 国产精品成人av性教育| 欧美影院成年免费版| xxx一区二区| 亚洲精品天天看| 国产精品美女主播| 亚洲精品网站在线播放gif| 97超视频免费观看| 成人精品一区二区三区电影黑人| 亚洲天堂第一页| 一区二区三区国产在线观看| 色综合亚洲精品激情狠狠| 欧美日韩国产页| 91在线色戒在线| 国产日韩在线一区| 亚洲va欧美va在线观看| 亚洲精选在线观看| 中文字幕在线成人| 中文字幕av一区二区三区谷原希美| 九九热这里只有精品6| 久久久久久噜噜噜久久久精品| 国产一区二区三区直播精品电影| 国产精品爽黄69| 日韩在线小视频| 日韩精品免费在线视频观看| 日韩欧美极品在线观看| 亚洲国产成人久久综合| 日韩免费看的电影电视剧大全| 欧美日韩亚洲一区二区三区| 欧美理论电影网| 日本久久中文字幕| 亚洲精品资源美女情侣酒店| 亚洲一区国产精品| 中文字幕在线视频日韩| 91社区国产高清| 九九热视频这里只有精品| 精品少妇一区二区30p| 亚洲精品国产综合久久| 色综久久综合桃花网| 精品国产一区二区三区久久| 欧美国产日韩一区二区在线观看| 超在线视频97| 国产精品久久久久久中文字| 欧美成人一二三| 国产国语刺激对白av不卡| 亚洲精品成a人在线观看| 国产精品日韩欧美| 青草青草久热精品视频在线观看| 91沈先生在线观看| 国产成人97精品免费看片| 国产91精品最新在线播放| 国产偷亚洲偷欧美偷精品| 久久久成人精品视频| 国产一区二区三区直播精品电影| 久久99久久99精品免观看粉嫩| 欧美激情久久久| 国产91ⅴ在线精品免费观看| 欧美肥婆姓交大片| 国产精品极品尤物在线观看| 久久天堂电影网| 最近更新的2019中文字幕| 亚洲男女自偷自拍图片另类| 日韩精品视频在线| 国产成人97精品免费看片|