2016-05-30 96 views
0

我正在使用NW.js,以创建本地websocket客户端。我的工作原理是,现在我正在重构我的代码,使其更加面向对象。重新分配函数调用时出错,为什么?

Websockclient.prototype.connect = function() { 
    if (!("WebSocket" in window)) { 
     alert("WebSocket is NOT supported!"); 
    } else { 
     uri = "ws://" + this.host + ":" + this.port; 
     this.ws = new WebSocket(uri); 
     this.ws.onopen = function(evt) { this.onOpen(evt); } 
    } 
}; 

Websockclient.prototype.log = function(message) { 
    if (this.logEn == true) { 
     console.log(message); 
    } 
}; 

Websockclient.prototype.onOpen = function(evt) { 
    this.log("connected"); 
    this.ws.send("Client says Hi!"); 
}; 

连接打开正确,但在Websockclient.prototype.onOpen函数调用中出现故障。错误输出如下:

[31910:31910:0530/115015:ERROR:edid_parser.cc(181)] invalid EDID: human unreadable char in name chrome-extension://oimdoepkkglchafiooagncfokloigedg/app/lib/websockclient.js:29 this.ws.onopen = function(evt) { this.onOpen(evt); }

TypeError: this.onOpen is not a function at WebSocket.ws.onopen (chrome-> > extension://oimdoepkkglchafiooagncfokloigedg/app/lib/websockclient.js:29:47)

它看起来像我有以下错误:

this.ws.onopen = function(evt) { this.onOpen(evt); }

(注:这是系NR文件websockclient.js 29)

我认为这个任务是不正确的,但我有点卡在这里。有人可以请解释我在这里错过了什么。

+0

为什么你不只是做'this.ws.onopen = this.onOpen; '? Websockclient.prototype.onOpen只收到1个参数,它甚至被称为相同的,因此与包装函数相同。 – Azamantes

+0

这是行不通的,因为onOpen函数中的this不会引用Websockclient对象。 – Gio

+1

就像@Azamantes说的那样,添加'this.onOpen = this.onOpen.bind(this)' – Pimmol

回答

相关问题