首頁 web前端 js教程 JavaScript插件化開發教學 (一)_javascript技巧

JavaScript插件化開發教學 (一)_javascript技巧

May 16, 2016 pm 04:17 PM
javascript 開發

一,開頭分析

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」片段程式碼,如下:

複製程式碼 程式碼如下:


  
  
       style="margin-top:10px;
       margin-bottom:30px;"
   >8    

           

  (2),「data.json」定義如下:

複製程式碼 程式碼如下:

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

  (3),"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方法來設定這些選項。

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

(四),最後總結

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

  (2),把全部程式碼放在閉包(一個即時執行函數)裡此時閉包相當於一個私有作用域,外部無法存取到內部的信息,並且不會存在全域變數的污染情況。官方創建開發規範的解釋是:a) 避免全域依賴;b) 避免第三方破壞;c) 相容jQuery操作符'$'和'jQuery '。

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

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

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

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

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

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1663
14
CakePHP 教程
1420
52
Laravel 教程
1315
25
PHP教程
1266
29
C# 教程
1239
24
四款值得推薦的AI輔助程式工具 四款值得推薦的AI輔助程式工具 Apr 22, 2024 pm 05:34 PM

這個AI輔助程式工具在這個AI快速發展的階段,挖掘出了一大批好用的AI輔助程式工具。 AI輔助程式設計工具能夠提升開發效率、提升程式碼品質、降低bug率,是現代軟體開發過程中的重要助手。今天大姚給大家分享4款AI輔助程式工具(而且都支援C#語言),希望對大家有幫助。 https://github.com/YSGStudyHards/DotNetGuide1.GitHubCopilotGitHubCopilot是一款AI編碼助手,可幫助你更快、更省力地編寫程式碼,從而將更多精力集中在問題解決和協作上。 Git

AI程式設計師哪家強?探索Devin、通靈靈碼和SWE-agent的潛力 AI程式設計師哪家強?探索Devin、通靈靈碼和SWE-agent的潛力 Apr 07, 2024 am 09:10 AM

2022年3月3日,距離世界首個AI程式設計師Devin誕生不足一個月,普林斯頓大學的NLP團隊開發了一個開源AI程式設計師SWE-agent。它利用GPT-4模型在GitHub儲存庫中自動解決問題。 SWE-agent在SWE-bench測試集上的表現與Devin相似,平均耗時93秒,解決了12.29%的問題。 SWE-agent透過與專用終端交互,可以開啟、搜尋文件內容,使用自動語法檢查、編輯特定行,以及編寫和執行測試。 (註:以上內容為原始內容微調,但保留了原文中的關鍵訊息,未超過指定字數限制。)SWE-A

學習如何利用Go語言開發行動應用程式 學習如何利用Go語言開發行動應用程式 Mar 28, 2024 pm 10:00 PM

Go語言開發行動應用程式教學隨著行動應用程式市場的不斷蓬勃發展,越來越多的開發者開始探索如何利用Go語言開發行動應用程式。作為一種簡潔高效的程式語言,Go語言在行動應用開發中也展現了強大的潛力。本文將詳細介紹如何利用Go語言開發行動應用程序,並附上具體的程式碼範例,幫助讀者快速入門並開始開發自己的行動應用程式。一、準備工作在開始之前,我們需要準備好開發環境和工具。首

五大熱門Go語言庫總表:開發必備利器 五大熱門Go語言庫總表:開發必備利器 Feb 22, 2024 pm 02:33 PM

五大熱門Go語言庫總結:開發必備利器,需要具體程式碼範例Go語言自從誕生以來,受到了廣泛的關注和應用。作為一門新興的高效、簡潔的程式語言,Go的快速發展離不開豐富的開源程式庫的支援。本文將介紹五大熱門的Go語言庫,這些庫在Go開發中扮演了至關重要的角色,為開發者提供了強大的功能和便利的開發體驗。同時,為了更好地理解這些庫的用途和功能,我們會結合具體的程式碼範例進行講

Android開發最適合的Linux發行版是哪一個? Android開發最適合的Linux發行版是哪一個? Mar 14, 2024 pm 12:30 PM

Android開發是一項繁忙而又令人興奮的工作,而選擇適合的Linux發行版來進行開發則顯得尤為重要。在眾多的Linux發行版中,究竟哪一個最適合Android開發呢?本文將從幾個方面來探討這個問題,並給出具體的程式碼範例。首先,我們來看看目前流行的幾個Linux發行版:Ubuntu、Fedora、Debian、CentOS等,它們都有各自的優點和特點。

Go語言前端技術探秘:前端開發新視野 Go語言前端技術探秘:前端開發新視野 Mar 28, 2024 pm 01:06 PM

Go語言作為一種快速、高效的程式語言,在後端開發領域廣受歡迎。然而,很少有人將Go語言與前端開發聯繫起來。事實上,使用Go語言進行前端開發不僅可以提高效率,還能為開發者帶來全新的視野。本文將探討使用Go語言進行前端開發的可能性,並提供具體的程式碼範例,幫助讀者更了解這一領域。在傳統的前端開發中,通常會使用JavaScript、HTML和CSS來建立使用者介面

Git 必知秘技:讓 Java 開發驚人全場 Git 必知秘技:讓 Java 開發驚人全場 Mar 06, 2024 am 08:25 AM

1.分支與合併分支允許您在不影響主分支的情況下試驗程式碼變更。使用gitcheckout建立新分支,並在嘗試新功能或修復錯誤時使用它。完成後,使用gitmerge將變更合併回主分支。範例程式碼:gitcheckout-bnew-feature//在new-feature分支上進行更改gitcheckoutmaingitmergenew-feature2.暫存工作使用gitadd將您要追蹤的變更新增至暫存區。這使您可以選擇性地提交更改,而無需提交所有修改。範例程式碼:gitaddMyFile.java3

了解VSCode:這款工具到底是用來做什麼的? 了解VSCode:這款工具到底是用來做什麼的? Mar 25, 2024 pm 03:06 PM

《了解VSCode:這款工具到底是用來做什麼的? 》身為程式設計師,無論是初學者或資深開發者,都離不開程式碼編輯工具的使用。在眾多編輯工具中,VisualStudioCode(簡稱VSCode)作為一款開源、輕量級、強大的程式碼編輯器備受開發者歡迎。那麼,VSCode到底是用來做什麼的呢?本文將深入探討VSCode的功能和用途,並提供具體的程式碼範例,以幫助讀者

See all articles