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