I'm using "socket.io" in my nodejs server. Is there a way to run the registered event functions in the scope of my class/module (in the browser)?
...
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() {
// ...
}
...
I'm using "socket.io" in my nodejs server. Is there a way to run the registered event functions in the scope of my class/module (in the browser)?
...
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() {
// ...
}
...
Share
Improve this question
edited Mar 7, 2011 at 16:35
koalabruder
asked Mar 7, 2011 at 16:12
koalabruderkoalabruder
2,9049 gold badges35 silver badges45 bronze badges
2 Answers
Reset to default 16I think V8 supports the "bind()" function:
this.socket.on('connect', this.myConnect.bind(this));
The call to "bind" will return a function that will call your function such that this
is set to the argument you pass (in this case, this
from the context of the call to that "init" function).
edit — "bind()" is there in the Function prototype in Chrome, so I imagine it works fine in node.
Here's what you can try in a browser (one that's got the function available, like Chrome):
var f = (function() { alert(this); }).bind("hello world");
f();
I have solved it in my YUI3 context with
this.socket.on('connect', Y.bind(this.myConnect, this));
Thanks to Pointy for the word "bind".