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