本emit不工作,但self.emit正在工作。 为什么?

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

自我只是一个variables持有这个参考,为什么这是抛出错误?

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

你已经知道封闭中的selfvariables的解决scheme,不同的(和更短的)解决scheme将绑定发射方法:

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