socket.io 匿名回调:无法调用 class 函数

socket.io anonymous callback: can't call class functions

所以,我有以下代码:

class Server {
  dataHandler(d) {
    console.log(d);
  }
  init() {
    io.on('connection', function(socket) {
      socket.on('data', this.dataHandler(d); //<-- TypeError: this.dataHandler is not a function
    });
  }
}

我想处理data socket的数据,但是如何跳出匿名函数环境访问this.dataHandler()?即使当我调用 dataHandler() 或 instance.dataHandler() (一个存储服务器的对象)时,它也找不到该函数。

谁能给我解释一下?

发生这种情况是因为 this.

的使用不正确

您应该使用箭头函数来保留 this 上下文:

class Server {
  dataHandler(d) {
    console.log(d);
  }
  init() {
    io.on('connection', (socket) => {
      socket.on('data', this.dataHandler(d));
    });
  }
}