问题
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 newbie here. When I make a Job object and call the performTask method, I get "that.task is not a function". Shouldn't this at the very beginning of the performTask method refer to Job?
What is the mistake I'm making?
Also, is there a better way of doing what I'm trying to do here?
回答1:
What is the mistake I'm making?
You are using an arrow function. this inside arrow functions is resolved differently, it won't refer to your Job instance.
Do not use arrow functions for prototype methods.
Have a look at Arrow function vs function declaration / expressions: Are they equivalent / exchangeable? for more information.
来源:https://stackoverflow.com/questions/37120640/node-this-func-is-not-a-function