无法通过此功能

时间:2019-12-05 10:43:33

标签: javascript this

我试图弄清楚它是如何工作的,我尝试了一些方法。但是我继续收到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。 谢谢

1 个答案:

答案 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();