Ik heb een functie gedefinieerd op een object als volgt:
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);
}
}
}));
}
De Typescript compiler neemt dat en produceert dit:
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);
}
}
}));
};
Let op deze lijn in de JS:
_this.errorChecker(data, function (data)
De compiler correct merkte mijn gebruik van de => operator en concludeerde dat thisin mijn oorspronkelijke Typescript moet verwijzen naar het bovenliggende object en niet wat thiser gebeurt te zijn wanneer het succes callback daadwerkelijk wordt genoemd. Maar, om wat voor reden de compiler is vergeten om de magie lijn zijn onder andere:
var _this = this;
Aan het begin van de functie. Is dit een bug? Of is dit door het ontwerp? Als het gewoon genegeerd de _this / dit ding helemaal, zou ik alleen maar zeggen dat ik doe het verkeerd, maar het gaat halverwege hier waardoor ik denk dat er iets mis is.
Update : vreemd dit lijkt een probleem met de compiler in Visual Studio, als ik dezelfde code in de kopie speelplaats het werkt zoals verwacht.













