在 setTimeout 函数中访问类变量

eri*_*n30 0 javascript angular

我有一个必须经常发布事件的 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" };
Run Code Online (Sandbox Code Playgroud)

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

Sur*_*yan 5

您可以使用这两种方法。如果您与函数自身的上下文无关,我认为首先是最好的方法,这是更可取的方法。

1)箭头函数-this.timeout = setTimeout(() => this.startWarning(), 30000);

2)显式上下文绑定-this.timeout = setTimeout(this.startWarning.bind(this), 30000);