gpt4 book ai didi

javascript - 无法通过此访问功能

转载 作者:行者123 更新时间:2023-11-30 19:03:58 25 4
gpt4 key购买 nike

我试图弄清楚它是如何工作的,我尝试了一些东西。但是我不断收到 TypeError,这显然意味着我没有正确分配 this 变量。如果有人能指出我哪里出错了,以及我使用的方式是否正确,那就太好了。

所以,

我有一个主文件,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。谢谢

最佳答案

根据您发布的代码中的逻辑,您真正想要的可能是将 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();

关于javascript - 无法通过此访问功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59193381/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com