2013-05-03 50 views
1

以下Node.js的腳本不能正常工作this.emit不工作,但self.emit正在工作。爲什麼?

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

自我僅僅是這一個變量保持基準,爲什麼這是它不工作拋出錯誤?

+1

這已經被問這麼勤了。請在Google上搜索「this」和「javascript」。你應該得到*噸*的結果。 – 2013-05-03 13:04:35

+0

@戈洛:那可能是問題 - 你能建議一個好的和正確的*閱讀嗎? – Bergi 2013-05-03 13:08:29

+0

例如,請參閱http://stackoverflow.com/a/134149/1333873 ...部分「作爲功能」 – 2013-05-03 13:15:37

回答

5

因爲the this keyword在由setInterval調用的函數中有不同的值。

你已經知道在封閉與self變量的解決方案,不同的(較短)的解決方案是binding信號發送的方法:

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

我在JavaScript中95%的問題與範圍有關。應該知道... – foszter 2015-11-07 15:54:00

相關問題