我有这个UseCase类:
class UseCase {
constructor(repository) {
this.repository = repository;
}
execute() {
//do stuff
}
}
module.exports = UseCase;
和此Service类:
class Service {
constructor(repository) {
this.useCase = new UseCase(repository);
}
doWork = this.useCase.execute;
}
module.exports = Service;
我想要的是对service.doWork()
的委托useCase.execute()
调用,但是当我执行它时,出现此错误:
TypeError:无法读取未定义的属性“ execute”
但是,如果我将Service
代码更改为此:
class Service {
constructor(repository) {
this.repository = repository;
}
doWork = new UseCase(this.repository).execute;
}
module.exports = Service;
它正常工作!这是为什么?我想念什么?
答案 0 :(得分:2)
类字段在构造函数可以运行之后立即运行,在任何super
调用之后(如果有)立即运行。您的代码等效于:
class Service {
constructor(repository) {
this.doWork = this.useCase.execute;
this.useCase = new UseCase(repository);
}
}
没有及时定义。
在分配给doWork
之后,将useCase
放入构造函数中。
您还需要确保在正确的调用上下文中调用.execute
-仅传递this.useCase.execute
会丢失useCase
的调用上下文。
class Service {
constructor(repository) {
this.useCase = new UseCase(repository);
this.doWork = () => this.useCase.execute();
}
}
您还可以使用在调用时调用.execute
的类字段:
class Service {
constructor(repository) {
this.useCase = new UseCase(repository);
}
doWork = () => this.useCase.execute();
}