jQuery Callback的基本實作與使用方法
在 js 開發中,由於沒有多線程,經常會遇到回調這個概念,比如說,在 ready 函數中註冊回調函數,註冊元素的事件處理等等。在比較複雜的場景下,當一個事件發生的時候,可能需要同時執行多個回呼方法,可以直接考慮到的實作就是實作一個佇列,將所有事件觸發時需要回呼的函數都加入到這個佇列中保存起來,當事件觸發的時候,從這個佇列重依序取出已儲存的函數並執行。
概述
$(document).ready()的簡寫。
允許你綁定一個在DOM文件載入完成後執行的函數。這個函數的作用如同$(document).ready()一樣,只不過用這個函數時,需要把頁面中所有需要在 DOM 載入完成時執行的$()運算子都包裝到其中。從技術上來說,這個函數是可連結的——但真正以這種方式連結的情況並不多。 你可以在一個頁面中使用任多個$(document).ready事件。參考 ready(Function) 以取得更多 ready 事件的資訊。
參數
callbackFunctionV1.0
當DOM載入完成後要執行的函數
可以如下簡單的實作。
首先,實作一個類別函數來表示這個回呼類別。在 javascript 中,使用陣列來表示這個佇列。
function Callbacks() { this.list = []; }
然後,透過原型實作類別中的方法。增加和刪除的函數都保存在陣列中,fire 的時候,可以提供參數,這個參數將會被傳遞給每個回呼函數。
Callbacks.prototype = { add: function(fn) { this.list.push(fn); }, remove: function(fn){ var position = this.list.indexOf(fn); if( position >=0){ this.list.splice(position, 1); } }, fire: function(args){ for(var i=0; i<this.list.length; i++){ var fn = this.list[i]; fn(args); } } };
測試程式碼如下:
function fn1(args){ console.log("fn1: " + args); } function fn2(args){ console.log("fn2: " + args); } var callbacks = new Callbacks(); callbacks.add(fn1); callbacks.fire("Alice"); callbacks.add(fn2); callbacks.fire("Tom"); callbacks.remove(fn1); callbacks.fire("Grace");
或者,不使用原型,直接透過閉包來實現。
function Callbacks() { var list = []; return { add: function(fn) { list.push(fn); }, remove: function(fn){ var position = list.indexOf(fn); if( position >=0){ list.splice(position, 1); } }, fire: function(args) { for(var i=0; i<list.length; i++){ var fn = list[i]; fn(args); } } }; }
這樣的話,範例程式碼也需要調整一下。我們直接對用 Callbacks 函數就可以了。
function fn1(args){ console.log("fn1: " + args); } function fn2(args){ console.log("fn2: " + args); } var callbacks = Callbacks(); callbacks.add(fn1); callbacks.fire("Alice"); callbacks.add(fn2); callbacks.fire("Tom"); callbacks.remove(fn1); callbacks.fire("Grace");
下面我們使用第二種方式繼續進行。
對於更複雜的場景來說,我們需要只能 fire 一次,以後即使呼叫了 fire ,也不再生效了。
比如說,可能在創建物件的時候,成為這樣的形式。這裡使用 once 表示僅僅能夠 fire 一次。
var callbacks = Callbacks("once");
那麼,我們的程式碼也需要進行調整。其實很簡單,如果設定了 once,那麼,在 fire 之後,將原來的隊列中直接幹掉就可以了。
function Callbacks(options) { var once = options === "once"; var list = []; return { add: function(fn) { if(list){ list.push(fn); } }, remove: function(fn){ if(list){ var position = list.indexOf(fn); if( position >=0){ list.splice(position, 1); } } }, fire: function(args) { if(list) { for(var i=0; i<list.length; i++){ var fn = list[i]; fn(args); } } if( once ){ list = undefined; } } }; }
jQuery 中,不只提供了 once 一種方式,而是提供了四種類型的不同方式:
once: 只能夠觸發一次。
memory: 當佇列已經觸發之後,再加入進來的函數就會直接被調用,不需要再觸發一次。
unique: 保證函數的唯一
stopOnFalse: 只要有一個回呼回傳 false,就中斷後繼的呼叫。
這四種方式可以組合,使用空格分隔傳入建構函數即可,例如$.Callbacks("once memory unique");
官方文件中,提供了一些使用的範例。
callbacks.add(fn1, [fn2, fn3,...])//增加一個/多個回呼
callbacks.remove(fn1, [fn2, fn3,...])/ /移除一個/多個回呼
callbacks.fire(args)//觸發回調,將args傳給fn1/fn2/fn3…
callbacks.fireWith(context, args)//指定上下文context然後觸發回呼
callbacks.lock()//鎖定佇列目前的觸發狀態
callbacks.disable()//禁掉管理器,也就是所有的fire都不生效
以上是jQuery Callback的基本實作與使用方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

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

熱門話題

DirectX修復工具是專業的系統工具,主要功能是偵測目前系統的DirectX狀態,如果發現異常就可以直接修復。可能還有很多用戶不清楚DirectX修復工具怎麼用吧,以下就來看看詳細教學。 1、使用修復工具軟體進行修復檢測。 2、如果修復完成後提示C++元件有異常的問題,請點選取消按鈕,然後點選工具選單列。 3、點選選項按鈕,選擇擴展,點選開始擴展按鈕。 4、擴展完成後再重新進行檢測修復即可。 5、如果修復工具操作完成後仍未解決問題,可以嘗試卸載重新安裝報錯的程序。

華為手機如何實現雙微信登入?隨著社群媒體的興起,微信已成為人們日常生活中不可或缺的溝通工具之一。然而,許多人可能會遇到一個問題:在同一部手機上同時登入多個微信帳號。對於華為手機用戶來說,實現雙微信登入並不困難,本文將介紹華為手機如何實現雙微信登入的方法。首先,華為手機自帶的EMUI系統提供了一個很方便的功能-應用程式雙開。透過應用程式雙開功能,用戶可以在手機上同

有很多朋友還不知道百度網盤怎麼用,所以下面小編就講解了百度網盤的使用方法,有需要的小伙伴趕緊來看一下吧,相信對大家一定會有所幫助哦。第一步:安裝好百度網盤後直接登入(如圖);第二步:接著可依頁面提示選擇「我的分享」與「傳輸清單」(如圖);第三步:在「好友分享」裡可以把圖片和檔案直接分享給好友(如圖所示);第四步:接著選擇「分享」後可勾選電腦檔案或是網盤檔案(如圖所示);第五步:然後就可以尋找好友(如圖所示);第六步:還可以在「功能寶箱」中尋找自己需要的功能(如圖所示)。上面就是小編為大

程式語言PHP是一種用於Web開發的強大工具,能夠支援多種不同的程式設計邏輯和演算法。其中,實作斐波那契數列是一個常見且經典的程式設計問題。在這篇文章中,將介紹如何使用PHP程式語言來實作斐波那契數列的方法,並附上具體的程式碼範例。斐波那契數列是一個數學上的序列,其定義如下:數列的第一個和第二個元素為1,從第三個元素開始,每個元素的值等於前兩個元素的和。數列的前幾元

KMS啟動工具是一種用來啟動微軟Windows和Office產品的軟體工具。 KMS是KeyManagementService的縮寫,即金鑰管理服務。 KMS啟動工具透過模擬KMS伺服器的功能,使得電腦可以連接到這個虛擬的KMS伺服器,從而實現對Windows和Office產品的啟動。 KMS激活工具體積小巧,功能強大,可以一鍵永久激活,無需聯網狀態就可以激活任何版本的window系統和任何版本的Office軟體,是目前最成功的且經常更新的Windows激活工具,今天小編就跟大家介紹一下kms激活工

如何在華為手機上實現微信分身功能隨著社群軟體的普及和人們對隱私安全的日益重視,微信分身功能逐漸成為人們關注的焦點。微信分身功能可以幫助使用者在同一台手機上同時登入多個微信帳號,方便管理和使用。在華為手機上實現微信分身功能並不困難,只需要按照以下步驟操作即可。第一步:確保手機系統版本和微信版本符合要求首先,確保你的華為手機系統版本已更新至最新版本,以及微信App

potplayer是一款非常強大的媒體播放器,但不少夥伴還不知道potplayer怎麼用,今天小編就來詳細介紹一下potplayer的使用方法,希望能幫助大家。 1.PotPlayer快捷鍵PotPlayer播放器預設常用快捷鍵如下:(1)播放/暫停:空格(2)音量:滑鼠滾輪,上下方向鍵(3)前進/後退:左右方向鍵(4)書籤:P-加入書籤,H-查看書籤(5)全螢幕/還原:Enter(6)倍速:C-加速,X-減速,Z-復位(按一次調整0.1倍速度,可以在0.2到12倍速之間調節)( 7)上/下一幀:D/

相信很多用戶都在使用小馬win7激活工具,但是你們知道小馬win7激活工具如何使用嗎?接著,小編就帶來了小馬win7激活工具使用的方法,對此感興趣的用戶快來下文看看吧。第一步,在重裝系統後,進入“”我的電腦,點擊上方選單中的“系統屬性”,查看Windows啟動狀態。第二步,點選上網下載win7啟動工具,點選打開,(資源很多哪裡都有)。第三步,開啟小馬啟動工具後,點選「一件永久啟動Windows」。第四步,等待啟動程序完成啟動。第五步,再次查看Windows啟動狀態,發現系統已啟動。
