重新分配函数调用时出错,为什么?

时间:2016-05-30 10:03:31

标签: javascript

我正在使用NW.js,以便创建一个本地websocket-client。我的原则是有效的,目前我正在重构我的代码以使其更加面向对象。

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:错误:edid_parser.cc(181)]无效的EDID:   人名不可读的名字   镀铬的扩展://oimdoepkkglchafiooagncfokloigedg/app/lib/websockclient.js:29           this.ws.onopen = function(evt){this.onOpen(evt); }

     

TypeError:this.onOpen不是函数       在WebSocket.ws.onopen(chrome->> extension://oimdoepkkglchafiooagncfokloigedg/app/lib/websockclient.js:29:47)

看起来我在下面有一个错误:

  

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

(注意:这是文件websockclient.js中第29行)

我认为这项任务不正确,但我有点卡在这里。有人可以请解释我在这里缺少的东西。

1 个答案:

答案 0 :(得分:0)

thx to @ Pimmol的评论我已经解决了这个问题,如下所示:

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

需要更改为以下内容:

this.ws.onopen = this.onOpen.bind(this);

有关详细信息,请参阅以下文档:

https://github.com/kevinsawicki/http-request