У меня есть функция, определенная в объекте, как это:
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);
}
}
}));
}
Машинописи компилятор принимает, что и производит это:
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);
}
}
}));
};
Обратите внимание эту строку в ЯШАХ:
_this.errorChecker(data, function (data)
Компилятор правильно заметил мое использование => оператора и пришел к выводу , что thisв моей первоначальной машинопись следует обратиться к родительскому объекту , а не то , что thisслучается, когда обратный вызов на самом деле называется. Но, по какой - то причине компилятор забыл включить волшебную строку:
var _this = this;
В начале функции. Является ли это ошибка? Или это дизайн? Если он просто игнорировал _this / эта вещь вообще, я бы просто сказать, что я делаю это неправильно, но это происходит на полпути здесь, которая заставляет меня думать, что-то не так.
Обновление : странно это , кажется, проблема с компилятором в Visual Studio, если я копирую тот же код на детской площадке он работает , как ожидалось.













