javascript - 如何使用 'this' 关键字规避 ES6 类范围问题

标签 javascript socket.io this ecmascript-6

<分区>

例如在类构造函数中:

Socket.on('user:join', onUserJoin);

'onUserJoin' 被声明为类的一个方法,但被 socket.io 调用,所以 'this' 不是我的类。解决此问题的一种方法是使用 '=>' 函数。

例子:

Socket.on('user:join', (data)=>{
        this.isOnline = true;
    }); 

现在 'this' 是我的类,但我如何引用这个匿名函数来取消订阅?

socket.removeListener('user:join', ????);

我试过这个:

let self;
class RoomController {
    constructor() {
    self = this;
    }
    ...
}

并在方法中引用 self 但 self 是跨套接字共享的...

命名匿名函数可以解决它,但我更喜欢绑定(bind)选项。

最佳答案

您可以使用Function.prototype.bind

Socket.on('user:join', onUserJoin.bind(this));

这确保 onUserJoin 具有正确的上下文,这将是您的类的实例。

关于javascript - 如何使用 'this' 关键字规避 ES6 类范围问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30272456/

相关文章:

javascript - socket.io 不适用于简单用例

javascript - 'this' 关键字未被 function.prototype.call 重新分配

node.js - Socket.io 因内部错误而失败

javascript - 数字/字符串原型(prototype)中的 `this` 是什么?

javascript - if(this) {} else {} 是否曾经访问过 JavaScript 中的 else?

javascript - 为什么 jQuery 事件在外部就绪函数时不触发,即使在文档准备好之后?

javascript - 具有 Windows 身份验证的 CORS

javascript - 用于 GNOME Javascript 应用程序开发的 Anjuta 配置

javascript - ECharts自动高度

javascript - Nodejs中如何获取每个连接用户的socket对象?