2012-11-15 79 views
1

我有一個簡單的問題。我有Foo類,並在構造函數啓動計時器。在計時器回調中,我想要alert類屬性,但是我會得到「undefined」,爲什麼?CoffeeScripts類 - 在回調中訪問財產

class Foo 
    simpleProperty: "fooBar" 

    constructor: -> 
    setInterval @runBar, 1 * 1000 
    return 

    runBar: -> 
    alert @simpleProperty #undefined, why? 
    return 

foo = new Foo() 

謝謝你的幫忙!

回答

4

由於this的範圍(或在CoffeeScript的情況下爲@)。

你應該用一份豐厚的箭頭:

runBar: => 
    alert @simpleProperty #fooBar 

看到它的工作here

+1

哇,脂肪箭很好用。這應該在CoffeeScript的頁面上作爲例子給出。 –

-1

在我的理解中,如果你調用函數foo.runBar(),this指針將綁定到對象foo

所以在函數中,this.simpleProperty將被視爲foo.simpleProperty

顯然,它返回undefined

+0

當你使用'foo.runBar()'時''this'(CoffeeScript中的AKA'@')不一定是'foo'。如果'runBar'是一個綁定函數,那麼無論如何調用'runBar','this'都將被綁定。無論如何,這並不重要,因爲問題實際上是在執行'f = foo.runBar; f()'所以當'runBar'被調用時沒有'foo'。 –