TypeScriptで「this」のスコープを処理するための最良の方法がわかりません。
TypeScriptに変換するコードの一般的なパターンの例を次に示します。
class DemonstrateScopingProblems {
private status = "blah";
public run() {
alert(this.status);
}
}
var thisTest = new DemonstrateScopingProblems();
// works as expected, displays "blah":
thisTest.run();
// doesn't work; this is scoped to be the document so this.status is undefined:
$(document).ready(thisTest.run);
これで、通話を次のように変更できます...
$(document).ready(thisTest.run.bind(thisTest));
...これは機能します。しかし、それはちょっと恐ろしいことです。つまり、状況によってはコードをすべてコンパイルして正常に機能させることができますが、スコープのバインドを忘れると、コードが壊れてしまいます。
クラス内でそれを行う方法が欲しいので、クラスを使用するときに、「これ」がスコープされているものについて心配する必要はありません。
助言がありますか?
更新
機能する別のアプローチは太い矢印を使用することです:
class DemonstrateScopingProblems {
private status = "blah";
public run = () => {
alert(this.status);
}
}
それは有効なアプローチですか?