我正试图了解ES6中类的语法.同时通过Bonnie Eisenman的学习React native学习布料的本族语.
我遇到了一个关于在回调中访问this
的问题,当回调是一个类"方法"时.我知道,关于StackOverflow的回调中词汇this
的问题已经被多次提出.比如在
根据我在网上的研究,我找到了一个解决方案.但我不确定在ES6中这样做是否正确.
当我try 以下方法时,出现了我的问题:
class WeatherProject extends Component {
constructor(props) {
super(props);
this.state = {
zip: ''
};
}
_handleTextChange(event) {
console.log(event.nativeEvent.text);
this.setState({zip: event.nativeEvent.text})
}
render() {
return (
<TextInput
style={styles.input}
onSubmitEditing={this._handleTextChange}/>
);
}
}
(我只是从书中的示例中稍微修改了一下,以匹配ES6类语法和导入/导出语法,而不是Require.)
如果我这样做,_handleTextChange
中的this
是未定义的(无法读取未定义的属性'setState').我对此感到惊讶.来自其他OO语言,我解释这个方法的行为更像是一个静态方法.
我已经能够通过跳过类方法并使用箭头符号来解决这个问题.这很好用.我对此没有任何问题或困惑.
不过,我真的很想知道如何调用类方法.经过一段时间的研究,我成功地做到了以下几点:onSubmitEditing={this._handleTextChange.bind(this)}
.也许我误解了JavaScript的一个基本方面(我是JS的初学者),但这在我看来完全是疯了.如果不显式地将对象绑定回方法中,是否真的无法从方法中访问对象的上下文...它是自己的方法,在调用它的地方?
我还try 在构造函数中添加var self = this;
,并在_handleTextChange
中调用self.setState
.但发现这不起作用并不感到惊讶.
当对象作为回调调用时,从其方法中访问对象的正确方式是什么?