2012-10-17 50 views
1

我想用TypeScript重寫我的一個有用的JavaScript類。 在我的JavaScript類中,我使用閉包變量self來實現私人領域。 它在事件處理程序中很有用,例如onkeypress,其中重要的是要知道我的班級的事件和當前實例的調用者。使用TypeScript在JavaScript中關閉真正的私人領域

var MyClass = function (valueHolder) { 
      var self = this; 
      this.valueHolder = valueHolder; 

      MyClass.prototype.DoUsefullactions = function (value) { 
       alert(value); 
      } 

      MyClass.prototype.onclickForHolder = function (e) { 
       var value = $(this).val(); //value from attached input 
       self.DoUsefullactions(value); 
      } 

      MyClass.prototype.GetSelf = function() { 
       return self; 
      } 

      this.valueHolder.onclick = this.onclickForHolder; 
     } 

我找不到如何做出什麼閉包變量會是怎樣適用於類的所有方法,而不this.self語法打字稿,並在JavaScript的方式真正的私有成員。

+2

屬性分配給原型在構造函數並不好。它會在每個構造函數調用中分配它。 –

+0

謝謝你,這只是爲例 – Menotaurus

回答

3

這裏有一個替代函數語法。只需使用:

MyClass.prototype.onclickForHolder = e => { 
    var value = $(e.target).val(); //value from attached input 
    this.DoUsefullactions(value); 
} 

this將參照外this和打字稿將增加在幕後的自變量。

+0

謝謝你,我知道這個版本解決問題,我假設抽象的解決方案存在於這種情況下TypeScript – Menotaurus

1

嘗試

MyClass.prototype.onclickForHolder =(ev:Event) =>this.DoUsefullactions(this,ev); 
+0

如果你解釋他爲什麼應該這樣做,將不勝感激。 –