gpt4 book ai didi

另一个方法中的Javascript调用方法

转载 作者:行者123 更新时间:2023-11-29 10:11:57 25 4
gpt4 key购买 nike

现在我正在尝试使用 jslib 实现 Unity Webgl。我很困惑如何在另一个方法的函数中调用方法。我想在消息到来时调用方法 Recv (ws.onmessage)。但是,它显示“TypeError:this.Recv is undefined”。你能帮我弄清楚这个来源吗?
谢谢!!!!!!

这是我的源代码

var ws = null;
var init_url = "";
var received_msg = "";
var error_msg = "";

var WebsocketLib = {
Hello: function(){
window.alert("Hello,world!");
},
InitSocket: function(url){
init_url = Pointer_stringify(url);
console.log("InitWebSocket: "+init_url);
ws = new WebSocket(init_url);
ws.onopen = function(evt){
console.log("Connect");
isConnected = false;
ws.send("hello");
};
ws.onclose = function(evt) {
console.log("Close");
isConnected = false;
};
ws.onmessage = function(evt) {
received_msg = evt.data;
console.log("[recv] "+received_msg);
this.Recv.call(this);
};
ws.onerror = function(evt) {
error_msg = evt.data;
console.log("[error] "+error_msg);
this.Error.call(this);
};
},
Recv: function(){
console.log("[recv] "+received_msg);
var buffer = _malloc(received_msg.length + 1);
writeStringToMemory(returnStr, buffer);
return buffer;
},
Error: function(){
console.log("[error] "+error_msg);
var buffer = _malloc(error_msg.length + 1);
writeStringToMemory(error_msg, buffer);
return buffer;
}
}

最佳答案

ws.onmessage 内部 this 将引用 ws(因为我们在 ws 的方法中)而不是 WebsocketLib

但是,在您定义处理程序的 Initsocket 内部,this 会正确地(在某种意义上这就是您想要的)引用 WebsocketLib 对象,因此您可以创建一个绑定(bind)函数来绑定(bind) outer this 值,在事件处理程序中用作 this,如下所示:

ws.onmessage = function(evt) {
received_msg = evt.data;
console.log("[recv] "+received_msg);
this.Recv.call(this);
}.bind(this);

关于另一个方法中的Javascript调用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31803178/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com