不了解Javascript函数绑定

时间:2016-08-28 16:17:44

标签: javascript node.js

我正在编写一个带有send方法的Javascript类,该方法从其他类成员获取承诺并解析它。传递给它的成功和错误函数是类的成员。它没有按预期工作。方法代码:

Request.prototype.send = function () {
    if (!this.promise) {
        this.promise = this.api[this.method](this.flatArgsArray, this.options);
        this.promise.then(this.distributeResults, this.distributeErrors);
    } else {
        throw new Error('This request was already answered');
    }
}

distributeResults方法失败,代码为:

Request.prototype.distributeResults = function (result) {
    if (this.isEntityRequest) {
        var items = result.body[array_names[this.method]];
        items.forEach(this.distributeEntities);
    } else {
        this.callbacks.forEach(function (cb) {
            cb(null, result);
        });
    }
}

this.callbacks.forEach行未通知this.callbacks未定义。但是this.isEntityRequest必须是真的所以我调试并发现以this.开头的所有内容都是未定义的。

所以在send方法中,当我将方法传递给promise的then时,我将distributeResults方法绑定为this.distributeResults.bind(this)并且它有效。但我觉得它多余了。如果我必须这样做,我宁愿将方法定义为常规JS函数。我认为将它定义为类的方法会为我节省绑定。

所以,如果我将promise响应定义为类方法,为什么还需要绑定它?我错过了绑定怎么样?

0 个答案:

没有答案