node - this.func()不是函数

时间:2016-05-09 16:16:00

标签: javascript node.js scope prototype this

function Job(name, cronString, task) {
    "use strict";

    this.name = name;
    this.cronString = cronString;
    this.isReady = false;
    this.task = task;
}

Job.prototype.performTask = (db, winston) => {
     "use strict";
    const Promise = require("bluebird");
    let that = this;
    return new Promise((resolve, reject) => {
        let output = "";
        let success = true;

        try {
            output = that.task();
        }
        catch(error) {
            success = false;
            reject(error);
        }

        if(success) {
            resolve(output);
        }
    });
};

module.exports = Job;

这里的Javascript新手。当我创建一个Job对象并调用performTask方法时,我得到“that.task不是函数”。 this方法的最开始performTask不应该引用Job? 我犯的错是什么? 另外,有没有更好的方法来做我想做的事情?

1 个答案:

答案 0 :(得分:7)

  

我犯的错误是什么?

您正在使用箭头功能。箭头函数中的this以不同方式解析,它不会引用您的Job实例。

不要将箭头函数用于原型方法。

有关详细信息,请查看Arrow function vs function declaration / expressions: Are they equivalent / exchangeable?