我试图弄清楚它是如何工作的,我尝试了一些方法。但是我继续收到TypeError,这显然意味着我没有正确分配此变量。如果有人可以指出我要去哪里哪里,以及我使用的方式是否正确,那将是很好的。
所以
我有一个主文件service.js
class Service {
constructor() {
const cronService = new (require('./cron.js'))(this);
cronService.start();
this.newService = new (require('./newService.js'))(this);
}
}
const x = new Service();
这将访问另外两个文件,
newService.js
class NewService {
constructor(service) {
this.service = service;
this.logger = this.service.logger;
this.system = this.service.system;
}
async function1() {
console.log('woohoo');
}
}
module.exports = NewService;
和cron.js
class CronService {
constructor(service) {
this.service = service;
}
async start() {
await this.f2();
}
async f2() {
const self = this;
self.service.function1();
}
}
module.exports = CronService;
当我运行node service.js时,我期望woohoo的控制台日志。但是我一直遇到错误,self.service.function1
不是一个函数。
我尝试了许多组合,例如self.function1,this.function1,this.service.newService.function1,但所有组合都导致上述TypeError或导致未定义。
如何看待这个问题?我究竟做错了什么?我知道我可以直接导入newService.js,但是我一直在寻找是否可以从cron.js调用function1而不将其导入cron.js。 谢谢
答案 0 :(得分:1)
根据您发布的代码中的逻辑,可能您真正想要的是将this.newService
作为参数传递给new CronService(this.newService)
。
class NewService {
constructor(service) {
this.service = service;
this.logger = this.service.logger;
this.system = this.service.system;
}
function1() {
console.log('woohoo');
}
}
//module.exports = NewService;
class CronService {
constructor(service) {
this.service = service;
}
start() {
this.f2();
}
f2() {
const self = this;
self.service.function1();
}
}
//module.exports = CronService;
class Service {
constructor() {
this.newService = new NewService(this);
const cronService = new CronService(this.newService);
cronService.start();
}
}
const x = new Service();