本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
调用的函数中有不同的值。
你已经知道封闭中的self
variables的解决scheme,不同的(和更短的)解决scheme将绑定发射方法:
setInterval(this.emit.bind(this, "tick"), 1000);