2013-03-26 31 views
0

有時候,我寫我的JS類是這樣的:在CoffeeScript的合攏構造當地人

mylib.Container = function() { 
    var things = []; 

    // Returns the index of the image added 
    this.addItem = function(item) 
    { 
    things.push(item) 
    } 
} 
... 
var c = new mylib.Container(); 
c.addItem(whatever); 

我用「構造函數作用域」合攏變量(如things),以避免this範圍的問題,而我也使用它們緊圈(如在​​中使用的那些)。這些變量絕不會流出到創建的對象外部。

有沒有辦法在CoffeeScript中創建和使用這些變量?我知道我有@ivar符號短於this但東西告訴我acessing一個合攏var可能仍然是快...

+0

見最高投票的答案,而不是接受一個。 – Amberlamps 2013-03-26 09:26:03

+0

謝謝!將讀入它 – Julik 2013-03-26 09:35:33

+0

也類似於[如何使方法私人並繼承它在Coffeescript?](http://stackoverflow.com/q/10612293/479863)或至少答案可能是有用的。 – 2013-03-26 17:12:35

回答

0

在你的代碼,你在構造函數分配。你可以在咖啡以及

myLib.container = -> 
    things = [] 

    @addItem = (item) -> things.push item 

    this 

,或者如果你真的使用類語法

class myLib.container 
    constructor: -> 
    things = [] 
    @addItem = (item) -> things.push item 
+0

如果我使用類語法執行此操作,'things'將不在構造函數作用域之外。或者是構造函數作用域與我的例子中的函數作用域相同? – Julik 2013-03-26 13:10:06

+0

這就是爲什麼我在構造函數中添加了@ addItem的原因 – Ven 2013-03-26 18:20:03