我一直致力于将nodejs中的IRC bot编码为学习项目。我经常遇到以下事件监听器:
bot.addListener("message", function(from, to, text, message) {
.
.
.
});
问题:我一直在寻找解释这个addListener
定义/解释的位置。我找不到任何东西。它来自irc
中的npm
包,甚至在搜索irc
包源中的每个github文件后,我找不到字符串addListener
的实例。
这里发生了什么?我如何弄清楚这个addListener
是如何工作的,IRC事件的列表是什么(除了“消息”之外),等等?
答案 0 :(得分:1)
看这里http://nodejs.org/docs/latest/api/events.html#events_emitter_addlistener_event_listener
emitter.addListener(event,listener)
emitter.on(event,listener)
将侦听器添加到指定的侦听器数组的末尾 事件。没有检查是否已经听取了监听器 添加。多个调用传递相同的事件和组合 listener将导致多次添加侦听器。
server.on('connection', function (stream) { console.log('someone
connected!'); }); Returns emitter, so calls can be chained.
它通常会添加到http://nodejs.org/api/util.html#util_util_inherits_constructor_superconstructor
的对象中util.inherits(constructor,superConstructor)#继承原型 方法从一个构造函数到另一个。原型 构造函数将设置为从superConstructor创建的新对象。
作为额外的便利,superConstructor将是可访问的 通过constructor.super_ property。
var util = require("util"); var events = require("events");
function MyStream() {
events.EventEmitter.call(this); }
util.inherits(MyStream, events.EventEmitter);
MyStream.prototype.write = function(data) {
this.emit("data", data); }
var stream = new MyStream();
console.log(stream instanceof events.EventEmitter); // true console.log(MyStream.super_ === events.EventEmitter); // true
stream.on("data", function(data) {
console.log('Received data: "' + data + '"'); }) stream.write("It works!"); // Received data: "It works!"
对于你的irc-bot,你可以找到https://github.com/martynsmith/node-irc/blob/master/lib%2Firc.js第603行的刺痛
util.inherits(Client, process.EventEmitter);
并使用
等构造触发事件self.emit('connect'); // same file L:665