Посмотрите на эту строку
let func = this[`get${type}`];
Отсоединяет (или «отключает») функцию из ссылки this
на класс, поэтому при вызове func()
this
становится undefined
.
Есть несколько способов обойти это. Вы можете повторно связать this
, используя bind
, например:
let func = this[`get${type}`].bind(this);
Или вы можете явно перепривязать методы в конструкторе:
class Project {
constructor(project, api) {
...
this.getTasks = this.getTasks.bind(this);
this.getRequirements = this.getRequirements.bind(this);
this.getReleases = this.getReleases.bind(this);
}
}
Или вы можете определить свои методы как свойства лямбда-выражения, например:
class Project {
data = {};
getTasks = () => { ... };
getRequirements = () => { ... };
getReleases = () => { ... };
}
Конечно, это не единственные решения, и они могут иметь некоторые побочные эффекты. Например, свойства лямбда-выражения перечисляются, поэтому они будут отображаться в Object.keys(new Project())
.