如何访问本机对象调用的函数中的实例?

时间:2011-02-12 16:04:59

标签: 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引用了本机WebSocket对象的实例,那么如何在此处访问Socket对象的实例?

非常感谢。

1 个答案:

答案 0 :(得分:5)

你可以bind

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

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

如果你不熟悉绑定......它可以让你具体指定调用该函数时this 应该的内容。在该行运行时,this是您的Socket类实例,因此您基本上强制 parseMessage中的this 指向实例。

如果出于某种原因,您不想使用bind,则另一个选项是将this的副本保存到变量中,以便在事件发送中意义不会丢失:< / p>

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