回复 (5)
在回调时,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对象。
仅仅是个人理解,理解错了,请指正,欢迎高手们指正错误。
没人给解答一下!谢谢
这边是有点冷清.. 等等吧,, 顺便整下 markdown 那个蛋疼的代码排版
改了排版,会不会有人帮忙
LS说的无误,传入的匿名函数内部的this是soket对象。
如果想指定这个函数的this对象,可以这样做:
this.socket.on('data', function(data) { // handle here }.bind(this));