EventEmitter的基本用法:
var EventEmitter = require("events").EventEmitter;
var ee = new EventEmitter();
ee.on("someEvent", function () {
console.log("event has occured");
}); ee.emit("someEvent");
emit方法可以触发多个同样的事件,比如我们的页面中绑定了多个同样的someEven事件。
ee.on("someEvent", function () { console.log("event 1"); });
ee.on("someEvent", function () { console.log("event 2"); });
ee.on("someEvent", function () { console.log("event 3"); });
ee.on("someEvent", function () { console.log("event 4"); });
ee.on("someEvent", function () { console.log("event 5"); });
ee.on("someEvent", function () { console.log("event 6"); });
ee.on("someEvent", function () { console.log("event 7"); });
ee.on("someEvent", function () { console.log("event 8"); });
ee.on("someEvent", function () { console.log("event 9"); });
ee.on("someEvent", function () { console.log("event 10"); });
ee.on("someEvent", function () { console.log("event 11"); });ee.emit("someEvent");
上面绑定的11个someEvent事件都会触发,但是控制台会有一条警告,因为事件对象默认监听的事件数量是10个,我们可以通过代码设置改变这个数值,例如:
ee.setMaxListeners(20);
事件对象还有其他方法:
1,once()监听一次
2,removeListener , removeAllListeners() 移除监听事件/移除所有监听的事件
EventEmitter的高级用法:作为父类被其他类继承
比如在UserList.js文件中有UserList类
var util = require("util");
var EventEmitter = require("events").EventEmitter; var id = 1;
var database = {
users: [
{ id: id++, name: "Joe Smith", occupation: "developer" },
{ id: id++, name: "Jane Doe", occupation: "data analyst" },
{ id: id++, name: "John Henry", occupation: "designer" }
]
}; util.inherits(UserList, EventEmitter);
/*或者这样
function UserList () {
EventEmitter.call(this);
}*/ UserList.prototype.save = function (obj) {
obj.id = id++;
database.users.push(obj);
this.emit("saved-user", obj);
}; UserList.prototype.all = function () {
return database.users;
}; module.exports = UserList
现在我们可以在另外一个文件中这样写:
var UserList = require("./userlist");
var users = new UserList(); users.on("saved-user", function (user) {
console.log("saved: " + user.name + " (" + user.id + ")");
}); users.save({ name: "Jane Doe", occupation: "manager" });
users.save({ name: "John Jacob", occupation: "developer" });
//输出结果
saved: Jane Doe (4)
saved: John Jacob (5)