私はこのようなオブジェクトで定義された関数を持っています:
connect(callback?: (connected: bool) => void) {
$.ajax(this.url + "/connect", $.extend(true, {}, this.ajaxSettings, {
success: (data) => {
this.errorChecker(data, (data) => {
if (callback != null) {
callback(data);
}
});
},
timeout: this.timeout,
error: () => {
if (callback != null) {
callback(false);
}
}
}));
}
TypeScriptコンパイラはそれを受け取り、これを生成します。
VAS.prototype.connect = function (callback) {
$.ajax(this.url + "/connect", $.extend(true, {
}, this.ajaxSettings, {
success: function (data) {
_this.errorChecker(data, function (data) {
if(callback != null) {
callback(data);
}
});
},
timeout: this.timeout,
error: function () {
if(callback != null) {
callback(false);
}
}
}));
};
jsの次の行に注意してください。
_this.errorChecker(data, function (data)
コンパイラは、=>演算子の使用に正しく気づき、元のTypeScriptでは親オブジェクトを参照する必要があり、成功コールバックが実際に呼び出されたときにthis
何が起こっても参照しないと結論付けました。this
しかし、何らかの理由で、コンパイラはマジックラインを含めるのを忘れています。
var _this = this;
関数の開始時。これはバグですか?それともこれは仕様によるものですか?_this / thisを完全に無視した場合、私はそれを間違っていると言うだけですが、ここでは途中で何かが間違っていると思います。
更新:奇妙なことに、これはVisual Studioのコンパイラの問題のようです。同じコードをプレイグラウンドにコピーすると、期待どおりに機能します。