2014-12-06 28 views
0

說我有一個CoffeeScript的類:CoffeeScript的實例方法封裝

class Foo 
    MyMethodsBar:() => "bar" 
    MyMethodsBaz:() => "baz" 

有什麼辦法來封裝這樣的方法(不工作):

class Foo 
    MyMethods: 
    bar:() => "bar" 
    baz:() => "baz" 

所以我可以打電話:

f = new Foo() 
f.MyMethods.bar() 

問題是this(或@)當我是不是實例像常規方法那樣做。

我正在嘗試做這個清潔mixin /關注。

感謝, 埃裏克

回答

1

不,這是不可能的,除非你在構造函數中創建MyMethods並綁定this的方法。在這一點上,你幾乎沒有使用類的好處。

這是因爲當您通過f.MyMethods.bar()調用方法時,this將參考f.MyMethods。爲了防止這種情況,您可以事先將bar綁定到特定的對象。但是,在定義bar時,this應該引用的Foo的實例尚不存在,因此您無法將其綁定到構造函數之外。

您可以使用f.MyMethods.bar.call(f)來調用該方法,但這很麻煩。

+0

哦,好的。謝謝! – 2014-12-06 02:53:39