我知道(我認爲)ES6中的箭頭功能使用Lexical this,但我不確定爲什麼fat arrow功能調用的函數將this
設置爲undefined。如何在由ES6箭頭函數調用的函數中使用`this`?
我需要做些什麼才能撥打this.setResult
在handleAuthResult
?如果我不需要,我不想使用舊的function() {}.bind(this)
。
"use strict";
class Example {
constructor() {
this.checkAuth();
}
checkAuth() {
document.write("Checking auth now. ");
var iid = setInterval(() = > {
if (true) { // Have to do some dumb check here
clearInterval(iid);
this.authenticate(this.handleAuthResult)
}
}, 500);
}
authenticate(callback) {
callback({
value: true
});
}
handleAuthResult(result) {
document.write(`The result is ${result.value}.`);
this.setResult(result, this.loadThePage)
//^`this` is undefined here. How can I ever set the result?
}
// Another asynchronous thing
setResult(result, callback) {
callback();
}
loadThePage() {
document.write("The code never gets here, but the page should load now. ");
}
};
var example = new Example();
謝謝! https://jsfiddle.net/vujev4dj/
編輯:在我的這種防禦被標記爲重複的行爲我期待做下面小提琴,這就是爲什麼我預計不會有ES6使用bind
功能上this.handleAuthResult
工作: https://jsfiddle.net/m9e7j4ds/
它在撥弄工作的原因是因爲它使用'React.createClass()',而不是使用ES6類(延伸'React.Component') 。 'React.createClass()'綁定所有方法,這在使用ES6類時不會發生。 – ArneHugo
@bergi我不同意這是你鏈接的問題的重複,因爲它不是將方法綁定到ES6類實例的方法。尤其是,在答案中沒有提及直接製作一個箭頭功能。我相信這是提問者正在尋找的東西,儘管問題可能會更好地提出。 – ArneHugo