在Node.js中饲握,很多對象都會發(fā)出事件膀跌。比如奠涌,fs.readStream打開文件時會發(fā)出一個事件。所有發(fā)出事件的對象都是events.EventEmitter的實例降狠,可以通過require("events");獲得event模塊对竣。
通常,事件名采用“駝峰式”命名方式榜配,但是否纬,并沒有嚴格規(guī)定。這只是推薦的命名方法蛋褥。
函數可以添加給對象临燃,對象發(fā)出事件時,對應函數就會被執(zhí)行烙心。這些函數被稱作監(jiān)聽器(listeners)膜廊。在監(jiān)聽器函數中,this引用的是它(指此監(jiān)聽器函數)添加到的EventEmitter對象淫茵。
添加監(jiān)聽器
為事件綁定事件處理程序爪瓜,可以使用addListener(event, listener)和on(event, listener),它們的作用是完全一樣的匙瘪。傳入的參數是事件(event)和處理函數(listener)铆铆。
//事件觸發(fā)模塊
var events=require("events");
var util = require("util");
//定義對象
function Dad() {
}
//實現(xiàn)原型的繼承
util.inherits(Dad,events);
var newDad = new Dad();
function test() {
console.log("我是test方法");
}
function myfn() {
console.log("我是myfn方法");
}
addListener 方法
newDad.addListener("lee",test);
newDad.addListener("lee",myfn);
on 方法
newDad.on("lee",test);// ------on:jq方法炬转,可監(jiān)控
newDad.on("lee",myfn);
設置監(jiān)聽器最大綁定數
emitter.setMaxListeners(n)可以設置同一事件的監(jiān)聽器最大綁定數,默認情況下算灸,超過10個就會警告提示扼劈,這能幫我們快速找到類存泄露的地方。顯然菲驴,不是所有的事件觸發(fā)器都限制在10個監(jiān)聽器荐吵,通過這個方法可以設置,如果設置為0就是無限制赊瞬。
newDad.setMaxListeners(2); //-------只能綁定兩個
once(event, listener)綁定的事件監(jiān)聽器只會執(zhí)行一次先煎,然后就會被刪除掉。
newDad.once("onceEmit",test);
解除單個事件綁定
//removeAllListeners("事件名稱"巧涧,事件) 移除指定事件名稱的對應事件
//removeAllListeners("事件名稱") 移除指定事件名稱的所有事件
//removeAllListeners() 移除所有綁定事件
newDad.removeListener("lee",test)
觸發(fā)事件 emit
newDad.emit("lee");