gpt4 book ai didi

javascript - 带有 Socket.IO 的原始 'this' 上下文

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:09:14 24 4
gpt4 key购买 nike

我已经将(客户端)socket.io 包装在一个原型(prototype)类中:

Chat.Client = Class.create();

Chat.Client.prototype = {

initialize: function() {
...
this.socket.on('message', this.on_message);
...
},

on_message: function(data) {
this.add_chat_message(data.something);
}

do_something: function(something) {
...
}

这不起作用,因为 on_message 中的“this”将是“SocketNamespace”。传统上,我会通过将“this”作为附加参数传递给回调来解决这个问题,但因为我使用的是 socket.io,所以我不能简单地这样做。

我该如何解决这个问题?

最佳答案

您可以将其包装在另一个函数中:

initialize: function() {
// ...
var client = this;
this.socket.on('message', function(data) { client.on_message(data); });

在较新的浏览器(或 Node.js)中,您可以选择在 Function 原型(prototype)上使用一个名为“bind”的函数:

  this.socket.on('message', this.on_message.bind(this));

“绑定(bind)”函数返回一个函数,该函数在被调用时将强制使用给定值作为 this 值来调用原始函数 (“on_message”)。

关于javascript - 带有 Socket.IO 的原始 'this' 上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10141795/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com