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

标签 javascript methods

现在我正在尝试使用 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/

相关文章:

javascript - Next js 13.5.1 中的 'use client' 问题仍然在服务器端得到响应

ruby - 新手 Ruby on Rails - 从 View 将字符串传递给方法?

java - 添加到数组列表

c++ - 在 C++ 中将值作为类的成员传递给 vector

javascript - Jquery append vs appendTo渲染不同的结果

javascript - 结合 google.script.run 和 javascript 函数

javascript - 外部 JS 是否可以在 iOS WkWebView 的加载页面(完成后)上执行

java - 如何使用此类中的公共(public)变量和方法?

java - 调用自己的方法时出错

javascript - 如何使用 jQuery 设置边框宽度?