pim*_*vdb 2 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
}
Run Code Online (Sandbox Code Playgroud)
在parseMessage函数中,this引用本机WebSocket对象的实例,那么如何Socket在此处访问实例到我的对象?
非常感谢.
你可以bind:
this.webSocket.onmessage = this.parseMessage.bind(this);
Run Code Online (Sandbox Code Playgroud)
但是,并非所有浏览器本机都支持此功能,但您可以从MDC获取代码段以使所有浏览器兼容.
在您不熟悉绑定时......它允许您具体指定调用该函数时this 应该是什么.在该行运行时,this是您的Socket类实例,因此您基本上强制this 在 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]);
};
};
Run Code Online (Sandbox Code Playgroud)