我承认我已经问了一个关于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
对象的实例?
非常感谢。
答案 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]);
};
};