2013-05-28 104 views
2

如何繼承EventEmitter?我正在嘗試以下測試:繼承events.EventEmitter不起作用

var util = require('util') 
    ,events = require('events'); 

function Downloader() { 

    events.EventEmitter.call(this); 
} 
util.inherits(Downloader, events.EventEmitter); 
console.log(new Downloader() instanceof events.EventEmitter); // true 
Downloader.prototype.download = function(episode) { 
    var self = this; 

    var statusMessage = 'Downloading: ' + episode; 
    self.emit('status', statusMessage);  

    setTimeout(function() { 
     var finishedMessage = 'Downloaded ' + episode; 
     self.emit('finished', finishedMessage); 
    }, 5000);  
} 

exports.Downloader = new Downloader(); 

節點抱怨'對象'沒有方法'on'。但是,當檢查Downloader實例時,EventEmitter返回true。

有人可以解釋一下嗎?謝謝!

回答

3

哎呀。首先它應該是'module.exports'。其次它的'instanceof'而不是'instanceOf'。

我的不好。這是一個工作示例

var util = require('util') 
    ,events = require('events'); 

function Downloader() { 

    events.EventEmitter.call(this); 
} 
util.inherits(Downloader, events.EventEmitter); 

Downloader.prototype.download = function(episode) { 
    var self = this; 

    var statusMessage = 'Downloading: ' + episode; 
    self.emit('status', statusMessage);  

    setTimeout(function() { 
     var finishedMessage = 'Downloaded ' + episode; 
     self.emit('finished', finishedMessage); 
    }, 5000);  
} 

module.exports = new Downloader();