node.js,setTimeoutcallback方法和“this”

我正在尝试使用node.js编写一个简单的轮询应用程序。 我想编写一个EventEmitter来执行一个计时器的行动,并根据该周期性行动的结果发出事件。

我开始创build我自己的对象,并从EventEmitterinheritance。 我启动一个计时器,使用setInterval,并指定定时器过后调用的方法。 在定时器callback方法中,我想引用我创build的对象的variables,但是this不会引用该对象。

我怎样才能在这个方法中引用我的variables? 这是我的代码:

 var util = require('util'), events = require('events'), timers = require('timers'), redis = require('redis'); // define worker object var JobPoller = function () { // inherit event emitter events.EventEmitter.call(this); // save reference to database this.db = redis.createClient(); // start main loop this.interval_id = timers.setTimeout(this.check, 1000); }; JobPoller.prototype.check = function () { // pop a job off the queue if possible this.db.rpop('pdf-job-queue', function (err, result) { if (err != null) this.emit('error', err); if (result != null) this.emit('job', JSON.parse(result)); // check for more jobs this.interval_id = timers.setTimeout(this.check, 1000); }); }; // inhert from event emitter util.inherits(JobPoller, events.EventEmitter); // export the poller instance module.exports = new JobPoller; 

this.check只是一个简单的函数,函数调用的时候这个函数内部的值会被确定。

节点应该支持bind所以你可以绑定到你想要的thisfunction如下:

 this.interval_id = timers.setTimeout(this.check.bind(this), 1000); 

或者,您可以使用闭包来手动强制this是你想要的:

 var self = this; this.interval_id = timers.setTimeout(function() { self.check() }, 1000);