EventEmitter的前端JS實現

2022-09-06 02:48:12 字數 1611 閱讀 5252

/**

* on(event, listener):為指定事件註冊乙個***,接受乙個字串 event 和乙個**函式。

* emit(event, [arg1], [arg2]): 按***的順序執行執行每個***

* addlistener(event, listener):on的同名函式(alias)

* once(event, listener): 和on類似,但只觸發一次,隨後便解除事件監聽

* removelistener(event, listener): 移除指定事件的某個監聽**

* removealllisteners([event]):移除指定事件的所有監聽**

* setmaxlisteners(n):用於提高***的預設限制的數量。(預設10監聽**個產生警告)

* listeners(event): 返回指定事件的***陣列。

*/var eventemitter = ,

on: function(event, listener)

this.events[event].push(listener)

if (this.events[event].length > this.maxlisteners)

},emit: function(event)

var originlen = this.listeners(event).length

for (var i = 0 ; i < this.events[event].length; i++) }},

addlistener: function(event, listener) ,

once: function(event, listener)

this.on(event, fn)

},removelistener: function(event, listener)

var index = this.events[event].indexof(listener)

if (index >= 0)

},removealllisteners: function(event) else }},

setmaxlisteners: function(n) ,

listeners: function(event) else

}}eventemitter.once('event', function() )

eventemitter.on('event', function(arg1) )

eventemitter.on('event', function(arg1, arg2) )

eventemitter.on('event', function(arg1, arg2, arg3) )

eventemitter.emit('event', 1, 2, 3)

eventemitter.emit('event', 1, 2, 3)

// 列印:

// 僅僅觸發一次

// 乙個引數 1

// 二個引數 1 2

// 三個引數 1 2 3

// 乙個引數 1

// 二個引數 1 2

// 三個引數 1 2 3

關於EventEmitter的用法

1 var eventemitter require events eventemitter 2 var ee new eventemitter 3 ee.on someevent function 6 7 ee.emit someevent emit方法可以觸發多個同樣的事件,比如我們的頁面中繫結...

node核心EventEmitter的應用總結

eventemitter是node中應用非常廣泛,不管是框架,還是腳手架,還是外掛程式都可以看到eventemitter的身影。比如我們去檢視vue,react,webpack,egg,koa等框架或者外掛程式的原始碼,都可以看到內部使用到了eventemitter。那麼到底什麼是eventemit...

EventEmitter可能導致重複註冊和重複觸發

eventemitter在同乙個函式註冊到同乙個event name時會導致重複觸發 例如下面的 var events require events let ev1 ev 1 let onev1 a,b var emitter new events.eventemitter console.log ...