2011-03-07 30 views
5

我在我的nodejs服務器中使用「socket.io」。有沒有辦法在我的課程/模塊範圍內(在瀏覽器中)運行註冊的事件功能?如何將socket.io(在nodejs中)的事件處理程序綁定到我自己的作用域?

... 
init: function() { 
    this.socket = new io.Socket('localhost:3000'); //connect to localhost presently 
    this.socket.on('connect', this.myConnect); 
}, 
myConnect: function() { 
    // "this.socket" and "this.f" are unknown 
    // this.socket.send({}); 
    // this.f(); 
}, 
f: function() { 
    // ... 
} 
... 

回答

14

認爲 V8支持「綁定()」函數:

this.socket.on('connect', this.myConnect.bind(this)); 

調用「綁定」將返回,將調用功能,使得this設置功能到您傳遞的參數(在這種情況下,從調用上下文到該「init」函數的this)。

編輯 —「bind()」存在於Chrome中的Function原型中,所以我想它在節點中工作正常。

這裏就是你可以在瀏覽器嘗試(一個那種有可用的功能,如瀏覽器):

var f = (function() { alert(this); }).bind("hello world"); 
f(); 
+0

不幸的是我沒有Chrome來測試它,它在Firefox中不起作用。有沒有其他方法? – koalabruder 2011-03-07 16:38:05

+0

然後在Node.js中嘗試它 - 它應該工作。 – Pointy 2011-03-07 16:45:14

+0

另外,你應該真的嘗試Chrome瀏覽器 - 這是一個很好的瀏覽器,速度非常快:-) – Pointy 2011-03-07 16:47:49

3

我與

this.socket.on('connect', Y.bind(this.myConnect, this)); 

由於尖尖的解決了這個問題,我YUI3背景爲「綁定」一詞。

相關問題