Am o funcție definită într-un obiect de genul:
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);
}
}
}));
}
Compilatorul typescript ia asta și produce acest lucru:
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);
}
}
}));
};
Notă această linie în js:
_this.errorChecker(data, function (data)
Compilatorul a observat în mod corect utilizarea mea a => operator și a concluzionat că thisdactilografiat meu original ar trebui să se refere la obiectul părinte și nu ceea ce thisse întâmplă să fie atunci când apel invers de succes este , de fapt numit. Dar, pentru un motiv oarecare compilatorul a uitat să includă linia magică:
var _this = this;
La începutul funcției. Este un bug? Sau este acest lucru prin design? În cazul în care pur și simplu ignorat _this / chestia asta cu totul, aș spune doar că fac greșit, dar merge la jumătatea aici ceea ce mă face să cred că ceva este greșit.
Actualizare : ciudat acest lucru pare a fi o problemă cu compilator în Visual Studio, dacă copiați același cod în terenul de joacă funcționează conform așteptărilor.













