函数原型节点不工作

时间:2016-04-04 19:57:10

标签: javascript node.js

我正在节点中创建一个可观察的模式。

./ 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

为什么会这样?

1 个答案:

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