无法设置未定义的 属性
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
的构造函数和实例之间存在断开连接,这导致了您的问题。
如果您想分配给特定的 Websocket
的 ws
,您需要在创建 Websocket
和对应的 ws
之后执行此操作。在您分配 this.ws
.
之后,这通常会在构造函数中
但是,在您的示例中,Websocket
构造函数是递归的,应该会导致堆栈溢出。每次创建一个套接字时,都会在其中创建另一个套接字,从而导致无限深的套接字树。这可能不是您想要的,我建议将您的 Websocket
函数(/构造函数)重命名为具有唯一名称的名称(可能是 SocketWrapper
)。
如果您希望所有 Websocket
都有一个 onopen
属性,您应该使用 Websocket.prototype.onopen
语法。这将创建(并分配)一个 属性 给 Websocket
的原型,因此所有 new Websocket
都会有那个 属性。好像不是这样。
我有一个 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
的构造函数和实例之间存在断开连接,这导致了您的问题。
如果您想分配给特定的 Websocket
的 ws
,您需要在创建 Websocket
和对应的 ws
之后执行此操作。在您分配 this.ws
.
但是,在您的示例中,Websocket
构造函数是递归的,应该会导致堆栈溢出。每次创建一个套接字时,都会在其中创建另一个套接字,从而导致无限深的套接字树。这可能不是您想要的,我建议将您的 Websocket
函数(/构造函数)重命名为具有唯一名称的名称(可能是 SocketWrapper
)。
如果您希望所有 Websocket
都有一个 onopen
属性,您应该使用 Websocket.prototype.onopen
语法。这将创建(并分配)一个 属性 给 Websocket
的原型,因此所有 new Websocket
都会有那个 属性。好像不是这样。