小编spe*_*rar的帖子

构造函数中的事件处理程序与构造函数之外的事件处理程序的行为不同

我有一个对象的两个实例,它扩展EventEmitter并监听一个名为的事件finish.如果我在构造函数外部设置事件处理程序,一切都按预期工作.每个实例都会听到finish它触发的事件.但是如果我在构造函数中设置事件处理程序,则只有第二个创建的实例会听到并对事件作出反应,或者看起来如此.

这是代码:

var util = require('util');
var EventEmitter = require('events').EventEmitter;
var fs = require('fs');

var NEXT_ID = 0;
var MyEmitter = function() {
  EventEmitter.call(this);
  this.id = NEXT_ID;
  NEXT_ID++;
  console.log('CREATED EMITTER WITH ID:', this.id)
  self = this;
  this.on('finish', function() {
    console.log('FINISH EVENT . CONSTRUCTOR LISTENER .', 
                'LISTENER ID:', self.id, 
                '. ORIGINATOR ID:', this.id);
  });
};

util.inherits(MyEmitter, EventEmitter);

var setFinishListener = function(emitter) {
  emitter.on('finish', function() {
    console.log('FINISH EVENT . NON-CONSTRUCTOR LISTENER .', 
                'LISTENER ID:', emitter.id, 
                '. …
Run Code Online (Sandbox Code Playgroud)

javascript events node.js

5
推荐指数
1
解决办法
64
查看次数

标签 统计

events ×1

javascript ×1

node.js ×1