javascript - 如何访问 native 对象调用的函数中的实例?

标签 javascript this instance

我承认我已经问过有关 this 关键字及其在某些情况下的含义的问题,但恐怕我仍然没有完全理解它。任何提示将不胜感激。

我基本上有一个 Socket 类,它是 HTML5 的 WebSocket 类的包装器,以使事情变得更容易(我只复制了与我的问题相关的内容):

var Socket = function(url) {
    this.url = url;
    this.webSocket = null;
}

Socket.prototype.init = function() {
    this.webSocket = new WebSocket(this.url);
    this.webSocket.onmessage = this.parseMessage;
};

Socket.prototype.parseMessage = function(event) {
    console.log(this); // logs the WebSocket (native) instance
}

在parseMessage函数中,this指的是 native WebSocket对象的实例,那么我如何访问该实例到我的Socket这里有对象吗?

非常感谢。

最佳答案

您可以绑定(bind)它:

this.webSocket.onmessage = this.parseMessage.bind(this);

但是,并非所有浏览器本身都支持此功能,但您可以从 MDC 获取代码片段使所有浏览器兼容。

如果您不熟悉绑定(bind)...它可以让您具体指定调用该函数时this应该是什么。当该行运行时,this 是您的 Socket 类实例,因此您基本上是强制 this inside parseMessage 指向回该实例.

如果由于某种原因,您不想使用 bind,另一个选择是将 this 的副本保存到变量中,这样就不会丢失含义在事件调度中:

Socket.prototype.init = function() {
    this.webSocket = new WebSocket(this.url);
    var _self = this;
    this.webSocket.onmessage = function (event) {
        _self.parseMessage.apply(_self, [event]);
    };
};

关于javascript - 如何访问 native 对象调用的函数中的实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4979018/

相关文章:

javascript - 空数据单元格验证

java - 我什么时候应该在类里面使用 "this"?

javascript - Typescript + Jquery Ajax + 这个

c# - 是否可以在不创建引用的情况下更改新创建对象的多个属性?

javascript - 新函数返回新函数

javascript - Angular JS 错误 : [$rootScope:infdig] in IE 10 and IE 11 only

javascript - 使用 Firefox 插件更新选项卡内容

javascript - 带有图标的 React-bootstrap 按钮

javascript - javascript 中的 'this' 指的是什么?

c++ - 语法使未命名实例