Javascript ES6 React类构造函数外部的arrow函数的行为

Javascript ES6 React类构造函数外部的arrow函数的行为,javascript,reactjs,ecmascript-6,react-redux,arrow-functions,Javascript,Reactjs,Ecmascript 6,React Redux,Arrow Functions,我在一个使用react+react redux和es6(通过babel)的项目中有一段简单的代码: 类主屏幕扩展React.Component{ //有问题的代码: showLockTimer=setTimeout(this.authenticate,2000); leaveAnimationTimer=setTimeout(()=>{ this.setState({hide:true});//正确调用了setState }, 1000); authenticate=()=>{//从不运行。 /

我在一个使用react+react redux和es6(通过babel)的项目中有一段简单的代码:

类主屏幕扩展React.Component{
//有问题的代码:
showLockTimer=setTimeout(this.authenticate,2000);
leaveAnimationTimer=setTimeout(()=>{
this.setState({hide:true});//正确调用了setState
}, 1000);
authenticate=()=>{//从不运行。
//做些事情。。。
this.props.showLock();
} 
}
由于某些原因,从未调用authenticate方法。。。但是,如果我将setTimeout放在类构造函数中,它会工作:

类主屏幕扩展React.Component{
//这是唯一更改的代码:
建造师(道具){
超级(道具);
this.showLockTimer=setTimeout(this.authenticate,2000);
}
leaveAnimationTimer=setTimeout(()=>{
this.setState({hide:true});//正确调用了setState
}, 1000);
authenticate=()=>{//现在它运行了!
//做些事情。。。
this.props.showLock();
} 
}
我想我对
这个
绑定非常了解,带有箭头函数,但我不明白为什么会发生这种情况?我试着在谷歌上搜索了很多关于这个问题的信息,也在网上阅读了类似的问题,但似乎找不到任何解释


抱歉,如果这是一个重复的问题。

在第一个示例中,您使用了
此选项。请在该选项存在之前对其进行身份验证。将它包装在另一个箭头函数
()=>{this.authenticate()}
中,将使其工作

在第一个示例中,在this.authenticate存在之前使用它。将它包装在另一个箭头函数中
()=>{this.authenticate()}将使其工作

在第一个示例中,将
验证
方法移到
ShowLockTimer
上,在第一个示例中,将
验证
方法移到
ShowLockTimer
上,哦,我的天。。。真不敢相信事情竟那么简单!那么,我在javascript中定义类方法的顺序很重要吗?最后发生的事情是,只有在对象用其方法初始化后才调用构造函数?类方法可以按任何顺序定义,但它们不是类方法,而是公共类字段。类主体中的
foo=…
等属性的运行方式与类构造函数中的
super()。。。真不敢相信事情竟那么简单!那么,我在javascript中定义类方法的顺序很重要吗?最后发生的事情是,只有在对象用其方法初始化后才调用构造函数?类方法可以按任何顺序定义,但它们不是类方法,而是公共类字段。类主体中的
foo=…
等属性的运行方式与类构造函数中的
super()
一样,因此排序很重要。