2017-09-23 139 views
0

我有一个JavaScript类,必须经常发布事件。代码如下所示:访问setTimeout函数中的类变量

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的calllback功能外,this范围点window所以我不能够访问this.Broadcast。什么是最好的方式来构建这个,所以我可以访问我需要的一切?

回答

2

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

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

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