我在这样的对象中定义了一个函数:
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);
}
}
}));
}
TypeScript 编译器接受它并产生这个:
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);
}
}
}));
};
注意js中的这一行:
_this.errorChecker(data, function (data)
编译器正确地注意到我对 => 运算符的使用并得出结论,this
在我原来的 TypeScript 中应该引用父对象,而不是this
实际调用成功回调时发生的任何事情。但是,由于某种原因,编译器忘记了包含魔法线:
var _this = this;
在函数开始时。这是一个错误吗?或者这是设计使然?如果它只是完全忽略了 _this / this 东西,我只会说我做错了,但它已经走到了一半,这让我觉得有些不对劲。
更新:奇怪的是,这似乎是 Visual Studio 中编译器的问题,如果我将相同的代码复制到操场上,它会按预期工作。