1
我已经在对象中定义这样的功能:缺少_this定义
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);
}
}
}));
};
注意这条线在js:
_this.errorChecker(data, function (data)
编译器已正确注意到我使用=>运算符并得出结论认为this
在我原来的TypeScript中应该引用父对象,而不是this
碰巧是实际调用成功回调时。但是,由于某种原因,编译器已经忘记包含魔术线了:
var _this = this;
在函数的开始处。这是一个错误?或者这是由设计?如果它完全忽略了这个/这个东西,我只是说我做错了,但它在这里的一半,这让我觉得有什么不对。
更新:奇怪这似乎是在Visual Studio中的编译器的问题,如果我将相同的代码复制到playground它按预期工作。
是的,我也这么认为,但我总是喜欢确保我不会错过首先明显的东西。我提交了一个bug [这里](http://typescript.codeplex.com/workitem/181)。 –