Ho una funzione definita in un oggetto come questo:
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);
}
}
}));
}
Il compilatore dattiloscritto prende questo e produce questo:
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);
}
}
}));
};
Nota questa riga nel js:
_this.errorChecker(data, function (data)
Il compilatore ha giustamente notato il mio uso del operatore => e ha concluso che thisnel mio dattiloscritto originale dovrebbe fare riferimento all'oggetto padre e non tutto ciò che thissembra essere quando il callback successo è effettivamente chiamato. Ma, per qualche motivo il compilatore ha dimenticato di includere la linea magica:
var _this = this;
All'inizio della funzione. è un insetto? O è questo disegno? Se semplicemente ignorato le _this / questa cosa del tutto, mi piacerebbe solo dire che sto facendo male, ma sta andando a metà strada qui che mi fa pensare che qualcosa non va.
Aggiornamento : stranamente questo sembra essere un problema con il compilatore in Visual Studio, se copio lo stesso codice nel parco giochi funziona come previsto.













