NodeJS:无法调用方法'推送'未定义的

时间:2017-03-30 21:37:43

标签: node.js

Greenhorn在这里尝试使用事件设置基本的nodejs程序。我的程序似乎很好,但我收到一个错误,推送功能未定义。我的印象是这是一个内置函数。有人能指出我正确的方向吗?代码如下。



//emitter.js file

function Emitter() {
  this.events = {};
}


Emitter.prototype.on = function(type, listener) {
  this.events = this.events[type] || [];
  this.events[type].push(listener);
}


Emitter.prototype.emit = function(type) {
  if (this.events[type]) {
    this.events[type].forEach(function(listener) {
      listener();
    });
  }
}


module.exports = Emitter;



// app.js file

var Emitter = require('./emitter');


var emtr = new Emitter();

emtr.on('greet', function() {
  console.log('Somewhere, someone said hello');
})

emtr.on('greet', function() {
  console.log('A second greeting occurred');
})


emtr.emit('greet');




1 个答案:

答案 0 :(得分:3)

您的Emitter.prototype.on()逻辑错误。

Emitter.prototype.on = function(type, listener) {
  this.events = this.events[type] || [];
  this.events[type].push(listener);
}

在上面的函数this.events = this.events[type] || [];中是不正确的,因为它将整个事件对象重新分配给数组。这意味着以下行this.events[type].push(listener)不会是一个数组,而是undefined

只需更正您的功能即可正确分配this.events[type]

Emitter.prototype.on = function(type, listener) {
  this.events[type] = this.events[type] || [];
  this.events[type].push(listener);
}