我承认我已经问过有关 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/