我有一个使用requirejs
的javascript类我创建了一个构造函数来创建它的实例,也使用如下方法
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似乎是我定义的,如构造函数所示。有人有什么想法吗?
由于
答案 0 :(得分:0)
您收到该错误,因为ws
不是Websocket
构造函数的属性。在构造函数中,您需要this.ws.onopen = funciton() { ... }
答案 1 :(得分:0)
Websocket
的构造函数和实例之间存在脱节,这导致了您的问题。
如果您要分配给特定Websocket
的{{1}},则需要在ws
和相应的Websocket
创建后执行此操作。在您指定ws
之后,这通常会在构造函数中。
但是,在您的示例中,this.ws
构造函数是递归的,并且应该导致堆栈溢出。每次创建套接字时,都会在其中创建另一个套接字,从而导致无限深的套接字树。这可能不是你想要的,我建议你将Websocket
函数(/ constructor)重命名为具有唯一名称的东西(也许是Websocket
)。
如果您希望所有SocketWrapper
都具有Websocket
属性,则应使用onopen
语法。这会为Websocket.prototype.onopen
的原型创建(并分配)一个属性,因此所有Websocket
都将拥有该属性。情况似乎并非如此。