/**
* 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 ...