在 socket.io 中向套接字添加功能的首选方法是什么?

Pip*_*ipe 3 javascript sockets node.js socket.io

是否有连接到 socket.io 的所有套接字的“原型”?

我想定义一些可用于每个连接的套接字的函数。

目前我有:

io.sockets.on('connection', function(socket) {
  //Define properties and functions for socket
  socket.hello = function(){
    console.log("hello from "+socket.id);
  }

  socket.hello();
});
Run Code Online (Sandbox Code Playgroud)

但我正在为每个套接字定义一个“新”hello 函数。有套接字原型吗?所以我可以有类似的东西:

Socket.prototype.hello = function(){
  console.log("hello from "+socket.id);
}

io.sockets.on('connection', function(socket) {
  socket.hello();
});
Run Code Online (Sandbox Code Playgroud)

Jon*_*ski 5

有,尽管它似乎无法通过 main 获得require('socket.io')

目前,您必须require() socket.js直接引用它:

var Socket = require('socket.io/lib/socket');

Socket.prototype.hello = function () {
    console.log("hello from " + this.id);
};
Run Code Online (Sandbox Code Playgroud)

注意:在 中prototype,您必须将实例引用为this。变量socket尚不可用。

另外,就像反对修改本机类型的建议一样,只有一个Object,因此尝试定义相同方法的多个模块可能会发生冲突。prototypeSocket.prototype