2

以下 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();

如果我像下面这样调用 emit 方法,它就不起作用

TickE.prototype.ticker = function() {
    //var self = this; // commented this line
    setInterval (function () {
         this.emit('tick'); // using this in place of self
    }, 1000);
};

self 只是一个持有 this 引用的变量,为什么会抛出错误?

4

1 回答 1

6

因为关键字this调用的函数中有不同的值setInterval

您已经知道self在闭包中使用变量的解决方案,一个不同(且更短)的解决方案将绑定emit 方法:

setInterval(this.emit.bind(this, "tick"), 1000);
于 2013-05-03T13:05:39.753 回答