J'ai une fonction définie dans un objet comme celui-ci:
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);
}
}
}));
}
Le compilateur dactylographiée prend cela et produit ceci:
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);
}
}
}));
};
Notez que cette ligne dans les js:
_this.errorChecker(data, function (data)
Le compilateur a correctement remarqué mon utilisation de l'opérateur => et a conclu que thisdans mon tapuscrit original doit se référer à l'objet parent et non ce qui thisarrive à être quand le rappel de succès est en fait appelé. Mais, pour une raison quelconque le compilateur a oublié d'inclure la ligne magique:
var _this = this;
Au début de la fonction. Est-ce un bug? Ou est-ce par la conception? Si juste ignoré les _this / cette chose tout à fait, je dirais simplement que je fais mal, mais ça va à mi-chemin ici qui me fait penser quelque chose ne va pas.
Mise à jour : curieusement , cela semble être un problème avec le compilateur dans Visual Studio, si je copie le même code dans le terrain de jeu fonctionne comme prévu.













