_this
これは非常に工夫された例ですが、クラス関数のどこかに変数を作成するとします。
class Person {
constructor (public name : string) {}
changeName(name) {
var _this = {};
(() => {
this.name = name;
})();
}
}
changeName
コンパイルされたコードの関連部分は次のようになっているため、関数を呼び出すと、これは期待どおりに機能しません。
var _this = this;
var _this = {};
(function () {
_this.name = name;
})();
これは悪いJavascriptです。2つのvar
宣言が互いに上書きしています。コンパイラによって作成されたものは、私の_this
によって上書きされてい_this
ます。
私が見る限り、この動作はTypeScript仕様では指定されていません。
なぜ彼らは対立する必要がありますか?コンパイラーは、変数とコンパイラーで生成された変数が互いに踏みつけられない_this
ようにするなど、自動生成された変数に名前を付けて名前を付けたかどうかを検出できませんか?_this2