Javascript 无法通过此访问函数

Javascript 无法通过此访问函数,javascript,this,Javascript,This,我试着弄明白这是怎么回事,我试了几件事。但我不断得到一个a类型错误,这显然意味着我没有正确地分配这个变量。如果有人能指出我错在哪里,我使用的方式是否正确,那就太好了 所以 我有一个主文件service.js class Service { constructor() { const cronService = new (require('./cron.js'))(this); cronService.start(); this.newService = new (re

我试着弄明白这是怎么回事,我试了几件事。但我不断得到一个a类型错误,这显然意味着我没有正确地分配这个变量。如果有人能指出我错在哪里,我使用的方式是否正确,那就太好了

所以

我有一个主文件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,但所有这些组合要么导致上述类型错误,要么导致未定义

如何看待这个问题?我做错了什么?我知道我可以直接导入newService.js,但我想知道我是否可以从cron.js调用function1而不必将其导入cron.js。
谢谢

根据您发布的代码中的逻辑,可能您真正想要的是将
this.newService
作为
新CronService(this.newService)
中的参数传递

class新闻服务{
建造师(服务){
服务=服务;
this.logger=this.service.logger;
this.system=this.service.system;
}
职能1(){
控制台日志('woohoo');
}
}
//module.exports=新闻服务;
类CronService{
建造师(服务){
服务=服务;
}
开始(){
这是f2();
}
f2(){
const self=这个;
self.service.function1();
}
}
//module.exports=CronService;
班级服务{
构造函数(){
this.newService=newnewservice(this);
const cronService=new cronService(this.newService);
cronService.start();
}
}

const x=新服务()
在NewService之前需要CronService,这不是一个问题吗?您对此有何期待:
new(require('./cron.js'))(this)要做什么?require代码应该放在您的文件的顶部,只是关于您问题中的语义的一个小注释:
这个
在javascript中不是一个变量,而是一个受保护的关键字,并且不能被分配(至少不能作为一个变量被分配),因为您已经将它传递给了
新的CronServeice
实例,所以CronService中的self.service将指向service this,而不是NewService this..比如'this.NewService=new(require('./NewService.js'))(this);const cronService=new(require('./cron.js'))(this.newService);cronService.start()`