无法设置未定义的 属性

Cannot set property of undefined

我有一个 javascript class 正在使用 requirejs 我创建了一个构造函数来创建它的实例,方法如下

define(function() {

    function Websocket(socket) {
        this.socket = socket;
        this.ws = new Websocket('ws://localhost:'.concat(socket));
        this.ws.binaryType = 'arraybuffer';
    }

    // WebSocket event handlers
    Websocket.ws.onopen = function () {
        console.log("Open");
        // Sends a JSON encoded message
        Websocket.ws.sendcmd("sum",2,3);
    };


    return Websocket

});

但每当我这样做时,我都会得到 Uncaught TypeError: Cannot set property 'onopen' of undefined。我不确定问题出在哪里,因为 Websocket 对我来说似乎已定义,如构造函数所示。有人有什么想法吗?

谢谢

你得到那个错误是因为 ws 不是你的 Websocket 构造函数的 属性。在你的构造函数中,你想要 this.ws.onopen = funciton() { ... }

Websocket 的构造函数和实例之间存在断开连接,这导致了您的问题。

如果您想分配给特定的 Websocketws,您需要在创建 Websocket 和对应的 ws 之后执行此操作。在您分配 this.ws.

之后,这通常会在构造函数中

但是,在您的示例中,Websocket 构造函数是递归的,应该会导致堆栈溢出。每次创建一个套接字时,都会在其中创建另一个套接字,从而导致无限深的套接字树。这可能不是您想要的,我建议将您的 Websocket 函数(/构造函数)重命名为具有唯一名称的名称(可能是 SocketWrapper)。

如果您希望所有 Websocket 都有一个 onopen 属性,您应该使用 Websocket.prototype.onopen 语法。这将创建(并分配)一个 属性 给 Websocket 的原型,因此所有 new Websocket 都会有那个 属性。好像不是这样。