this.emit不起作用,但self.emit正在工作。为什么?

时间:2013-05-03 13:03:01

标签: node.js eventemitter

以下node.js脚本无效

var EventEmitter = require('events').EventEmitter;
var util = require('util');

var TickE = function() {    
}

util.inherits(TickE, EventEmitter); //TickE.prototype.__proto__ = EventEmitter.prototype;

TickE.prototype.ticker = function() {
    var self = this;
    setInterval (function () {
         self.emit('tick');      
    }, 1000);
};

var t = new TickE ();

//console.log (util.inspect(t));

t.on('tick', function() { console.log ('Tick...');});

t.ticker();

如果我调用下面的

方法,它就无效了
TickE.prototype.ticker = function() {
    //var self = this; // commented this line
    setInterval (function () {
         this.emit('tick'); // using this in place of self
    }, 1000);
};

self只是一个变量,持有对此的参考以及为什么这会抛出错误?

1 个答案:

答案 0 :(得分:5)

因为the this keywordsetInterval调用的函数中具有不同的值。

你已经知道闭包中带有self变量的解决方案,不同(和更短)的解决方案是binding emit方法:

setInterval(this.emit.bind(this, "tick"), 1000);