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');

答案 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);
}