Javascript 收到websocket消息时ES6类中未定义的方法

Javascript 收到websocket消息时ES6类中未定义的方法,javascript,websocket,ecmascript-6,Javascript,Websocket,Ecmascript 6,当websocket事件触发时,我收到以下消息。无法访问外部上下文对象 未捕获的TypeError:无法读取未定义的属性“wsHandler” 在WebSocket.onmessage_收到(clsWebSocketSender.js:42) 您试图通过构造函数的本地变量\u self访问它: var\u self=this 请尝试直接在上访问它,改为: this.wsHandler.onMessageReceived(jsonData) 如果您随后发现此未定义或其他问题(我希望您会),只需将事

当websocket事件触发时,我收到以下消息。无法访问外部上下文对象

未捕获的TypeError:无法读取未定义的属性“wsHandler” 在WebSocket.onmessage_收到(clsWebSocketSender.js:42)


您试图通过构造函数的本地变量
\u self
访问它:

var\u self=this

请尝试直接在
上访问它,改为:

this.wsHandler.onMessageReceived(jsonData)

如果您随后发现
未定义或其他问题(我希望您会),只需将事件侦听器更改为使用箭头函数,这将保留您的

this.ws.addEventListener('message',(message)=>this.onmessage_received(message))


类WebSocketSender{
构造函数(wsHandler){
this.wsHandler=wsHandler;
this.ws==null;
this.url='';
}
初始化(url、发件人){
this.url=url;
this.ws=新的WebSocket(url);
this.ws.onopen=()=>console.log(“打开”);
this.ws.onclose=()=>console.log(“关闭”);
this.ws.onerror=()=>console.log(“错误”);
this.ws.addEventListener('message',message=>this.onmessage_received(message));
}
发送(数据){
if(this.ws.readyState==1){
this.ws.send(数据);
}
}
收到的信息(e){
调试器;
var server_message=e.data;
让jsonData=JSON.parse(e.data);
this.wsHandler.onMessageReceived(jsonData)
}
关闭(){
if(this.ws.readyState==1){
this.ws.close();
}
}

}
在构造函数中更改

this._self.wsHandler.onMessageReceived(jsonData)


_self变量将仅存在于构造函数中,在其他函数中不可用

将arrow函数用于回调:将onmessage_received方法更改为:

onmessage_recieved = (e) => {
    debugger;
    var server_message = e.data;
    let jsonData = JSON.parse(e.data);
    this.wsHandler.onMessageReceived(jsonData)
}

尝试了同样的错误Uncaught TypeError:无法读取WebSocket.onmessage_received(clsWebSocketSender.js:42)上未定义的属性“onMessageReceived”,那么您确定
wsHandler
正在按预期传递到构造函数中吗?是,已初始化它。我认为从websocket触发事件时作用域是不同的。使用arrow函数应该可以解决这个问题:
this.ws.addEventListener('message',(message)=>this.onmessage_received(message))我认为这将按照此链接中的定义工作。但是如何在es6类中实现呢
this.wsHandler.onMessageReceived(jsonData)
onmessage_recieved = (e) => {
    debugger;
    var server_message = e.data;
    let jsonData = JSON.parse(e.data);
    this.wsHandler.onMessageReceived(jsonData)
}