2016-04-04 13 views
0

Ich erstelle ein beobachtbares Muster in Knoten wie folgt.Funktion Prototyp Knoten funktioniert nicht

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

}; 

Da ist in meinem 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); 
}); 

Jetzt Datei, wenn es um tableEvent.startTimer versucht(); Ich bekomme diesen Fehler in der Konsole

tableEvent.startTimer is not a function 

Warum ist das?

+0

Wenn Sie den Prototyp Überschreibung festgelegt haben, feststellen, dass [die 'this' im' setTimeout' Rückruf wird nicht funktionieren] (http://stackoverflow.com/q/20279484/1048572) – Bergi

+0

Danke, ich habe var self = this; – Garuuk

Antwort

3

util.inherits() überschreibt den Prototyp des erbenden Objekts/Konstruktors, um seine Aufgabe zu erfüllen. Sie müssen Ihren Prototyp Änderungen nur nachutil.inherits() Aufruf:

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); 
}; 
Verwandte Themen