CNode

寻求解答,关于nodejs的event触发!

Ccoldsolo发布于14 年前最后回复14 年前5 回复6356 浏览0 收藏
查看回复

回复 (5)

J
jackliu8722#1·14 年前

在回调时,this应该指向了socket对象,socket应该是EventEmitter子类的一个对象,在EventEmitter.prototype.emit方法中,有这样一段代码: var handler = this._events[type]; if (!handler) return false;

if (typeof handler == 'function') { switch (arguments.length) { // fast cases case 1: handler.call(this); break; case 2: handler.call(this, arguments[1]); break; case 3: handler.call(this, arguments[1], arguments[2]); break; // slower default: var l = arguments.length; var args = new Array(l - 1); for (var i = 1; i < l; i++) args[i - 1] = arguments[i]; handler.apply(this, args); } return true;

} else if (isArray(handler)) { var l = arguments.length; var args = new Array(l - 1); for (var i = 1; i < l; i++) args[i - 1] = arguments[i];

var listeners = handler.slice();
for (var i = 0, l = listeners.length; i < l; i++) {
  listeners[i].apply(this, args);
}
return true;

} else { return false; } 代码中的type便是楼主程序中的data事件,handler就是楼主写的回调函数,在回调函数执行时,是这样调用的handler.apply(this,....),this便是EventEmitter的一个对象,也可是其子类的一个对象,但在这里,this便是楼主的socket对象,因此回调函数中的this便是socket对象。

仅仅是个人理解,理解错了,请指正,欢迎高手们指正错误。

C
coldsolo#2·14 年前

没人给解答一下!谢谢

J
jiyinyiyong#3·14 年前

这边是有点冷清.. 等等吧,, 顺便整下 markdown 那个蛋疼的代码排版

C
coldsolo#4·14 年前

改了排版,会不会有人帮忙

D
dead-horse#5·14 年前

LS说的无误,传入的匿名函数内部的thissoket对象。
如果想指定这个函数的this对象,可以这样做:

this.socket.on('data', function(data) { // handle here }.bind(this));

参与回复
登录后即可参与回复。登录