gpt4 book ai didi

javascript - 在 setTimeout 函数中访问类变量

转载 作者:行者123 更新时间:2023-11-28 14:45:50 25 4
gpt4 key购买 nike

我有一个 JavaScript 类,它必须经常发布事件。代码如下所示:

class TimerService {
constructor(BroadcastService) {
this.Broadcast = BroadcastService;
this.timeout;
this.warningTimer;
this.startTimer();
}

startTimer() {
clearTimeout(this.timeout);
clearTimeout(this.warningTimer);
this.timeout = setTimeout(this.startWarning, 30000);
}

startWarning() {
this.Broadcast.send("timeout-warning");
this.warningTimer = setTimeout(this.logout, 60000);
}

logout() {
this.Broadcast.send("session-expired");
}
}

export default { service: TimerService, name: "TimerService" };

问题是,在 setTimeout 回调函数中,this范围指向window所以我无法访问this.Broadcast 。构造这个的最佳方法是什么,以便我可以访问我需要的一切?

最佳答案

您可以使用这两种方法。我认为如果您与函数自己的上下文无关,那么第一种方法是最好的,并且这是更可取的方法。

1) Arrow function - this.timeout = setTimeout(() => this.startWarning(), 30000);

2) Explicit Context binding - this.timeout = setTimeout(this.startWarning.bind(this), 30000);

关于javascript - 在 setTimeout 函数中访问类变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46379950/

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