亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

js事件模型與自定義事件實例解析

 更新時間:2016年12月22日 15:44:03   作者:caihg  
JavaScript一個最簡單的事件模型,需要有事件綁定與觸發(fā),還有事件刪除。本文將對其具體實現(xiàn)代碼進行解析,需要的朋友一起來看下吧

JavaScript 一個最簡單的事件模型,需要有事件綁定與觸發(fā),還有事件刪除。

var eventModel = {
 list: {},
 bind: function () {
 var args = [].slice.call(arguments),
 type = args[0],
 handlers = args.slice(1);
 if (typeof type === 'string' && handlers.length > 0) {
  for (var i = 0; i < handlers.length; i++) {
  if (typeof handlers[i] === 'function') {
   if (!this.list[type]) {
   this.list[type] = [];
   }
   this.list[type].push(handlers[i]);
  }
  }
 }
 },
 unbind: function () {
 var type = arguments[0],
 handlers = Array.prototype.slice.call(arguments, 1);
 if (typeof type === 'string') {
  if (handlers.length === 0) {
  this.list[type] = [];
  } else {
  for (var i = 0; i < handlers.length; i++) {
   if (typeof handlers[i] === 'function' && handlers[i] === this.list[type][i]) {
   this.list[type].splice(i, 1);
   }
  }
  }
 }
 },
 trigger: function () {
 var arguments = [].slice.call(arguments),
 type = arguments[0],
 args = arguments[1] instanceof Array && !arguments[2] ? arguments[1] : arguments.slice(1),
 handlers = this.list[type];
 for (var i = 0; i < handlers.length; i++) {
  handlers[i].apply(this, args.splice(0, handlers[i].length));
 }
 }
};

其中主要實現(xiàn)了bind(綁定事件)、unbind(刪除事件)與 trigger (觸發(fā)事件)。對同一事件名稱,可以綁定多個事件處理函數(shù);并按照綁定的順序依次觸發(fā)。

args.splice(0, handlers[i].length) 觸發(fā)時的傳參

事件綁定與觸發(fā):

eventModel.bind('myevent1', function (a) {
 console.log(a); // 1
}, function(b) {
 console.log(b); // 2
}, function(c, d) {
 console.log(c + ' + ' + d); // a + b
});
eventModel.bind('myevent1', function (e) {
 console.log(e); // 50
});
eventModel.trigger('myevent1', 1,2,'a','b', 50);

事件刪除:

<button id="bind">bind</button>
<button id="unbind">unbind</button>
var fnX = function () {
 console.log('fnX');
}
var fnY = function () {
 console.log('fnY');
}
eventModel.bind('myevent2', fnX, fnY);
document.getElementById('unbind').onclick = function () {
 eventModel.unbind('myevent2', fnX); //刪除 fnX 后,只剩下 fnY
};
document.getElementById('bind').onclick = function () {
 eventModel.trigger('myevent2'); //輸出 fnX fnY
 //在點擊unbind后,只輸出 fnY
};

以上就是本文的全部內容,希望本文的內容對大家的學習或者工作能帶來一定的幫助,同時也希望多多支持腳本之家!

相關文章

  • C#解析char型指針所指向的內容(實例解析)

    C#解析char型指針所指向的內容(實例解析)

    在c++代碼中定義了一個功能函數(shù),這個功能函數(shù)會將計算的結果寫入一個字符串型的數(shù)組中output,然后c#會調用c++導出的dll中的接口函數(shù),然后獲取這個output并解析成string類型,本文通過實例解析C#?char型指針所指向的內容,感興趣的朋友一起看看吧
    2024-03-03
  • C#連接MySQL操作詳細教程

    C#連接MySQL操作詳細教程

    這篇文章主要為大家詳細介紹了C#連接MySQL操作詳細教程,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • 詳解.NET 6如何實現(xiàn)獲取當前登錄用戶信息

    詳解.NET 6如何實現(xiàn)獲取當前登錄用戶信息

    這篇文章主要介紹了.NET 6在應用開發(fā)時是如何實現(xiàn)當前登陸用戶信息獲取的,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起了解一下
    2022-01-01
  • Devexpress treelist 簡介

    Devexpress treelist 簡介

    本文給大家簡單介紹了Devexpress treelist 知識,包括屬性列表,事件及使用方法,非常不錯,具有參考借鑒價值,需要的朋友參考下
    2016-12-12
  • C#實現(xiàn)三元組的使用示例

    C#實現(xiàn)三元組的使用示例

    本文介紹了C#中的三元組數(shù)據(jù)結構,以及如何使用三元組在C#中進行一些特定的計算,具有一定的參考價值,感興趣的可以了解一下
    2023-11-11
  • C#寫入對象或集合類型數(shù)據(jù)到xml文件的方法

    C#寫入對象或集合類型數(shù)據(jù)到xml文件的方法

    這篇文章主要介紹了C#寫入對象或集合類型數(shù)據(jù)到xml文件的方法,涉及C#針對XML文件的相關操作技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-07-07
  • DevExpress實現(xiàn)TreeList父子節(jié)點CheckState狀態(tài)同步的方法

    DevExpress實現(xiàn)TreeList父子節(jié)點CheckState狀態(tài)同步的方法

    這篇文章主要介紹了DevExpress實現(xiàn)TreeList父子節(jié)點CheckState狀態(tài)同步的方法,需要的朋友可以參考下
    2014-08-08
  • C#數(shù)據(jù)表格(DataGridView)控件的應用案例

    C#數(shù)據(jù)表格(DataGridView)控件的應用案例

    這篇文章主要介紹了C#數(shù)據(jù)表格(DataGridView)控件的應用案例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-03-03
  • C#線程入門教程之單線程介紹

    C#線程入門教程之單線程介紹

    這篇文章主要介紹了C#線程入門教程之單線程介紹,本文講解了什么是進程、什么是線程、什么是多線程等內容,并給出了一個單線程代碼示例,需要的朋友可以參考下
    2015-02-02
  • C#制作簡易的屏保

    C#制作簡易的屏保

    這篇文章主要為大家詳細介紹了C#制作簡易的屏保的相關資料,C#如何制作屏保的過程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-01-01

最新評論