Mám funkci definovanou v objektu, jako je tento:
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);
}
}
}));
}
Strojopisu kompilátor trvá to a vytváří takto:
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);
}
}
}));
};
Poznámka: Tento řádek v JS:
_this.errorChecker(data, function (data)
Kompilátor správně všimli mé použití => a dospěl k závěru, že thisv mé původní strojopisu mělo odkazovat na nadřazeného objektu a ne, co thisse stane, že je-li úspěch callback vlastně volal. Ale z nějakého důvodu, že kompilátor zapomněl zahrnout magický řádek:
var _this = this;
Na začátku funkce. Je to chyba? Nebo je to záměrné? Je-li právě / ta věc úplně ignoroval _this bych jen říct, dělám to špatně, ale bude to na půl cesty sem, který je pro mě myslím, že je něco špatně.
Aktualizace : kupodivu to se zdá být problém s kompilátorem Visual Studio, když jsem zkopírovat stejný kód do hřišti to funguje, jak se očekávalo.













