2012-10-08 49 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)。 –