在npm包中定义的事件监听器在哪里?

时间:2015-01-08 07:58:54

标签: javascript node.js javascript-events npm irc

我一直致力于将nodejs中的IRC bot编码为学习项目。我经常遇到以下事件监听器:

bot.addListener("message", function(from, to, text, message) {
.
.
.
});

问题:我一直在寻找解释这个addListener定义/解释的位置。我找不到任何东西。它来自irc中的npm包,甚至在搜索irc包源中的每个github文件后,我找不到字符串addListener的实例。

这里发生了什么?我如何弄清楚这个addListener是如何工作的,IRC事件的列表是什么(除了“消息”之外),等等?

1 个答案:

答案 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