开发者

How to bind the event handler of socket.io (in nodejs) to my own scope?

开发者 https://www.devze.com 2023-02-15 19:58 出处:网络
I\'m using \"socket.io\" in my nodejs server. Is there a way to ru开发者_运维知识库n the registered event functions in the scope of my class/module (in the browser)?

I'm using "socket.io" in my nodejs server. Is there a way to ru开发者_运维知识库n 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 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".

0

精彩评论

暂无评论...
验证码 换一张
取 消