2012-10-08 48 views
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它按预期工作。

回答

0

这看起来像一个错误。你应该打开一个work item来跟踪这个。

+0

是的,我也这么认为,但我总是喜欢确保我不会错过首先明显的东西。我提交了一个bug [这里](http://typescript.codeplex.com/workitem/181)。 –