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

首頁 > 編程 > JavaScript > 正文

JavaScript插件化開發教程 (一)

2019-11-20 13:18:58
字體:
來源:轉載
供稿:網友

一,開篇分析

Hi,大家!今天這系列文章主要是說說如何開發基于“JavaScript”的插件式開發,我想很多人對”插件“這個詞并不陌生,

有的人可能叫“組件”或“部件”,這不重要,關鍵是看如何設計,如何做一個全方位的考量,這是本文的重點闡述的概念。我想大家對

“jQuery插件的方式”有一定的了解,我們結合這個話題一起討論一下,最終給出相關的實現方案,來不斷提高自己的誰能力。

二,進入插件正題

一般來說,jQuery插件的開發分為兩種:一種是掛在jQuery命名空間下的全局函數,也可稱為靜態方法。

另一種是jQuery對象級別的方法,即掛在jQuery原型下的方法,這樣通過選擇器獲取的jQuery對象實例也能共享該方法。

(1),類級別的插件開發

類級別的插件開發最直接的理解就是給"jQuery"類添加類方法,可以理解為添加靜態方法。典型的例子就是"$.ajax()"這個函數,將函數定義于jQuery的命名空間中。關于類級別的插件開發可以采用如下幾種形式進行擴展:

1.1添加一個全局函數,我們只需如下定義,看代碼: 

復制代碼 代碼如下:

$.hello = function(){
    alert("Hello,大熊君!") ;
} ;

1.2添加多個全局函數,可采用如下定義:

復制代碼 代碼如下:

$.extend({
    hello : function(name){
        // put your code here
    } ,
    world : function(){
        // put your code here
    }
}) ;

說明:”$.extend(target, [object1], [objectN])“(該方法主要用于合并兩個或更多對象的內容(屬性)到第一個對象,并返回合并后的第一對象。

如果該方法只有一個參數target,則該參數將擴展jQuery的命名空間,即作為靜態方法掛在jQuery全局對象下)。

(2),對象級別的插件開發

 對象級別的插件開發需要如下的兩種形式:

 2.1通過“$.fn.extend()”為原型動態掛載相關的屬性。

復制代碼 代碼如下:

(function($){  
    $.fn.extend({  
        pluginName : function(opts){  
            // put your code here
        }  
    }) ;  
})(jQuery) ;  

 2.2直接添加動態屬性到原型鏈上。

復制代碼 代碼如下:

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

  說明一下:二者是等價的,對于一個jQuery插件,一個基本的函數就可以很好地工作,但是對于復雜一點的插件就需要提供各種各樣的方法和私有函數。

你可能會使用不同的命名空間去為你的插件提供各種方法,但是添加過多的命名空間反而會使代碼變得混亂,健壯性下降。所以最好的解決辦法是適當地定義私有函數和方法。

所以我們通過自執行函數與閉包的結合實現模擬的私有插件單元,就像我們上面的實例中一樣。

(三),下面給一個簡單的例子看看實現的過程:

  (1),“html”片段代碼,如下:

復制代碼 代碼如下:

<div id="bb" style="width:220px;border:1px solid #ccc;">
   <span></span>
   <div
       style="margin-top:10px;
       margin-bottom:30px;"
   >8     </div>
</div>           

 ?。?),“data.json”定義如下:

復制代碼 代碼如下:

  {
    "text" : "你好,大熊君{{bb}} !" ;
  }

 ?。?),"bb.js"代碼如下:

復制代碼 代碼如下:

$(function(){
    $("#bb").bigbear() ;
}) ;
(function($){
    $.fn.bigbear = function(opts){
        opts = $.extend({},$.fn.bigbear.defaults,opts) ;
        return this.each(function(){
            var elem = $(this) ;
            elem.find("span").text(opts["title"]) ;
            $.get(opts["url"],function(data){
                elem.find("div").text(data["text"]) ;
            }) ;
        }) ;
    } ;
    $.fn.bigbear.defaults = {
        title : "這是一個簡單的測試" ,
        url : "data.json"
    } ;
})(jQuery) ;

  運行效果:

小結一下

  (1)“$.fn.bigbear.defaults”提供插件的默認參數選項一個擴展性良好的插件應該是可以讓使用者根據需求自定義參數選項,并控制插件的行為,所以提供恢復默認選項是很有必要的。你可以通過jQuery的extend方法來設置這些選項。

 ?。?),“return this.each(){...}”遍歷多個元素并返回jQuery使用Sizzle選擇器引擎,Sizzle可以為你的函數提供多元素操作(例如對所有類名相同的元素)。這是jQuery幾個優秀的特性之一,在開發插件過程中即使你不準備為你的插件提供多元素支持,但為這做準備仍然是一個很好的方式。另外,jQuery有一個很好的特點就是可以進行方法級聯,也可稱為鏈式調用,所以我們不應該破壞這個特性,始終在方法中返回一個元素。

(四),最后總結

 ?。?),jQuery為開發插件提拱了兩個方法,分別是:jQuery.fn.extend(object);  給jQuery對象添加方法。
jQuery.extend(object);  為擴展jQuery類本身.為類添加新的方法。

 ?。?),把全部代碼放在閉包(一個即時執行函數)里此時閉包相當于一個私有作用域,外部無法訪問到內部的信息,并且不會存在全局變量的污染情況。官方創建開發規范的解釋是:a) 避免全局依賴;b) 避免第三方破壞;c) 兼容jQuery操作符'$'和'jQuery '。

  (3),提供插件的默認參數選項一個擴展性良好的插件應該是可以讓使用者根據需求自定義參數選項,并控制插件的行為,所以提供恢復默認選項是很有必要的。你可以通過jQuery的extend方法來設置這些選項

 ?。?),遍歷多個元素并返回jQuery使用Sizzle選擇器引擎,Sizzle可以為你的函數提供多元素操作(例如對所有類名相同的元素)。這是jQuery幾個優秀的特性之一,在開發插件過程中即使你不準備為你的插件提供多元素支持,但為這做準備仍然是一個很好的實踐。另外,jQuery有一個很好的特點就是可以進行方法級聯,也可稱為鏈式調用,所以我們不應該破壞這個特性,始終在方法中返回一個元素。

 ?。?),一次性代碼放在主循環以外這一條很重要,但是常常被忽略。簡單的講,如果你有一段代碼是一堆默認值,只需要被實例化一次,而不是每次調用你插件功能的時候都需要實例化,你應該把這段代碼放在插件方法的外面。

  (6),大家學習完思考一下,如果項目技術選型換了這些插件又是強依賴“jQuery”機制,我們以前寫的插件將會不能用(假設不用jQuery的情況),如何做重構那?

明天的文章就會說一下這個問題,并且將會重構插件的關鍵邏輯,敬請期待。。。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久亚洲国产成人| 亚洲日本中文字幕免费在线不卡| 中文字幕日韩精品在线| 午夜精品蜜臀一区二区三区免费| 亚洲成色www8888| 久久天天躁狠狠躁夜夜av| 国产九九精品视频| 欧美人成在线视频| 欧美激情极品视频| 欧美激情2020午夜免费观看| 91亚洲永久免费精品| 久久精品国产久精国产思思| 欧美激情一区二区三区在线视频观看| 亚洲国产精品人久久电影| 精品国产一区二区三区四区在线观看| 国产欧美精品日韩精品| 欧美在线视频一区二区| 国产成人在线亚洲欧美| 成人天堂噜噜噜| 国产亚洲精品成人av久久ww| 欧美激情图片区| 中文字幕欧美日韩| 成人在线小视频| 久久九九热免费视频| 国产丝袜一区二区| 亚洲在线免费观看| 国产精品一区二区女厕厕| 国产精品第三页| 欧美日韩国产中字| 精品自拍视频在线观看| 91久久中文字幕| 欧美黑人性视频| 国产精品免费一区| 2019中文字幕免费视频| 亚洲综合成人婷婷小说| 欧美激情在线播放| 国内免费精品永久在线视频| 中文字幕欧美日韩在线| 日韩欧美成人免费视频| 在线看福利67194| 精品中文字幕久久久久久| 午夜精品国产精品大乳美女| 18久久久久久| 在线观看中文字幕亚洲| 国产日韩精品在线播放| 成人免费在线网址| 国产精品久久久久久久午夜| 91探花福利精品国产自产在线| 国产精品视频一区二区三区四| 久久久91精品| 欧美大人香蕉在线| 久久久久久国产精品三级玉女聊斋| 久久影视电视剧免费网站清宫辞电视| 成人欧美一区二区三区黑人| 亚洲视频综合网| 欧美乱大交xxxxx另类电影| 中文字幕欧美亚洲| 欧美综合激情网| 26uuu亚洲国产精品| 国产婷婷97碰碰久久人人蜜臀| 伊人男人综合视频网| 欧美精品久久久久久久| 日韩a**中文字幕| 国产精品久久久久久久久| 亚洲色图国产精品| 久久免费精品视频| 亚洲理论片在线观看| 欧美高清在线观看| 亚洲福利视频久久| 欧美老女人性生活| 欧美黑人巨大精品一区二区| 亚洲一区二区久久久久久久| 亚洲天堂网站在线观看视频| 欧美激情视频三区| 亚洲欧洲第一视频| 欧美激情精品久久久久久久变态| 久久五月天色综合| 97成人超碰免| 97在线观看视频| 97热在线精品视频在线观看| 亚洲电影在线观看| 日韩成人xxxx| 亚洲性xxxx| 亚洲免费电影一区| 国产精品久久久亚洲| 亚洲精品国产综合久久| 欧美日韩美女视频| 欧美最猛黑人xxxx黑人猛叫黄| 亚洲成人av片在线观看| 亚洲成人黄色网| 性欧美亚洲xxxx乳在线观看| 久久不射电影网| 美女扒开尿口让男人操亚洲视频网站| 国产精品久久久久久久久久久新郎| 久久久久亚洲精品| 精品一区二区三区四区在线| 最近2019中文字幕mv免费看| 孩xxxx性bbbb欧美| 日韩在线播放av| 亚洲精品视频中文字幕| 亚洲精品久久久久久久久久久久久| 九九热r在线视频精品| 欧美影院成年免费版| 69av视频在线播放| 黄色91在线观看| 国外色69视频在线观看| 国产69精品久久久久99| 日本欧美黄网站| 国产极品jizzhd欧美| 岛国av一区二区在线在线观看| 久久精品国亚洲| 亚洲精品成a人在线观看| 91成人天堂久久成人| www.日韩系列| 欧美日韩国产中文精品字幕自在自线| 精品久久久久久中文字幕一区奶水| 日韩在线观看免费| 在线日韩精品视频| 不卡毛片在线看| 疯狂做受xxxx欧美肥白少妇| 亚洲精品福利资源站| 精品国产自在精品国产浪潮| 久久99热这里只有精品国产| 在线日韩第一页| 国内精品伊人久久| 亚洲一区亚洲二区亚洲三区| 久久九九精品99国产精品| 亚洲免费伊人电影在线观看av| 欧美亚洲激情视频| 亚洲福利在线视频| 亚洲国产精品热久久| 91免费高清视频| 欧美在线免费视频| 亚洲欧洲第一视频| 欧美一区二区三区艳史| 91av在线精品| 国内外成人免费激情在线视频| 欧美一区二区.| 国产精品海角社区在线观看| 中文字幕日韩在线视频| 7m第一福利500精品视频| 亚洲码在线观看| 亚洲天堂影视av| 亚洲图片制服诱惑| 91精品国产自产在线| 久久精品国产成人精品| 亲子乱一区二区三区电影| 亚洲精品中文字| 亚洲欧美日本另类| 亚洲欧美中文日韩v在线观看| 欧美壮男野外gaytube| 国产91精品最新在线播放| 亚洲色在线视频| 亚洲精品国产美女| 亚洲国产一区二区三区四区| 欧美成人h版在线观看| 亚洲影院高清在线| 欧美成人激情视频免费观看| 国产精品久久久久高潮| 精品久久久久久中文字幕大豆网| 美女av一区二区| 亚洲偷熟乱区亚洲香蕉av| 一本一道久久a久久精品逆3p| 成人黄色av网站|