我正在尝试调用其他函数中的函数
因此,如果我这样做,它将起作用:我在这里所做的只是来自调用SearchUpdater(text)
函数的Updater
函数,它可以工作。
class Search2 extends React.Component {
constructor(props) {
super(props);
const ds = new ListView.DataSource({rowHasChanged: (r1, r2) => r1 !== r2});
this.state = {
dataSource: ds.cloneWithRows(['row 1', 'row 2']),
};
}
Updater(text){
var newArray = []
newArray.push(text)
this.setState({
dataSource: this.state.dataSource.cloneWithRows(newArray),
});
}
SearchUpdater(text){
this.Updater(text)
}
但是,如果我想在SearchUpdater
中运行一些函数(我有一些复杂的逻辑,我想放入..让它更容易),它会说this.updater
未定义......
class Search2 extends React.Component {
constructor(props) {
super(props);
const ds = new ListView.DataSource({rowHasChanged: (r1, r2) => r1 !== r2});
this.state = {
dataSource: ds.cloneWithRows(['row 1', 'row 2']),
};
}
Updater(text){
var newArray = []
newArray.push(text)
this.setState({
dataSource: this.state.dataSource.cloneWithRows(newArray),
});
}
SearchUpdater(text){
var ComplicatedLogicFunc = function(){
this.Updater("HEYO")
}
ComplicatedLogicFunc();
}
任何帮助都会很棒.. 谢谢!
答案 0 :(得分:1)
那是因为你的内部函数PS1+=$'\033[K' #erase to end of line
}中的this
关键字没有引用var ComplicatedLogicFunc
实例。
对于此示例,您可以使用Arrow functions(保留Search2
的值):
this
将var ComplicatedLogicFunc = () => {
this.Updater("HEYO");
};
关键字显式绑定到函数调用上下文:
this
或者你可以简单地将你的本地上下文存储在另一个变量中:
ComplicatedLogicFunc.call(this);
您可以在此处详细了解SearchUpdater(text) {
var self = this;
var ComplicatedLogicFunc = function(){
self.Updater("HEYO")
}
ComplicatedLogicFunc();
}
关键字在JavaScript中的工作原理:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/this