我正在节点中创建一个可观察的模式。
./ tableEvents.model.js
var EventEmitter = require('events').EventEmitter;
var util = require('util');
module.exports = function(logger){
function TableEvent(tableId){
this.tableId = tableId;
EventEmitter.call(this);
}
TableEvent.prototype.startTimer = function(){
this.timer = setTimeout(function(){
console.log('been 5 seconds, destroying');
this.emit('destroy');
}, 5000);
};
util.inherits(TableEvent, EventEmitter);
return TableEvent;
};
然后在我的route.js文件中
var TableEvent = require('../models/tableEvents.model')(logger);
var tableEvent = new TableEvent(table._id);
tableEvent.startTimer();
tableEvent.on('destroy', function(){
console.log('destroyed');
clearInterval(tableEvent.timer);
});
现在尝试使用tableEvent.startTimer();我在控制台中收到此错误
tableEvent.startTimer is not a function
为什么会这样?
答案 0 :(得分:3)
util.inherits()
会覆盖继承对象/构造函数的原型,以完成其任务。 调用util.inherits()
后,您只需进行原型更改:
function TableEvent(tableId){
this.tableId = tableId;
EventEmitter.call(this);
}
util.inherits(TableEvent, EventEmitter);
TableEvent.prototype.startTimer = function(){
this.timer = setTimeout(function(){
console.log('been 5 seconds, destroying');
this.emit('destroy');
}, 5000);
};