2015-03-13 35 views
4

我試圖在我的代碼中使用underscore's debounce函數,並且我傳遞了我的類的方法作爲第一個參數,但是_.debounce告訴我,我正在傳遞函數應該在的undefined參數。在CoffeeScript中試圖調用類中的方法時(@_methodName)它返回undefined

class SomeClass 

    click: _.debounce @_save, 600 

    _save: => 
    # Save logic 

另一方面,如果我這樣做,它的工作原理,但這種解決方案似乎有點醜。

class SomeClass 

    click: _.debounce (-> 
    @_save() 
), 600 

    _save: => 
    # Save logic 

當我檢查這兩種功能中產生的JS源,好像都應該可以正常工作,不知道如果我失去了一些東西從這裏的CoffeeScript。

回答

4

CoffeeScript的編譯:

click: _.debounce @_save, 600 

到:

SomeClass.prototype.click = _.debounce(SomeClass._save, 600); 

通知_save方法是怎樣的SomeClass靜態屬性,即它不是在原型,因爲在你的宣言@指類本身,而不是它的實例。

或者,你可以在構造函數中聲明你的點擊功能:

constructor: -> 
    @click = _.debounce @_save, 600 

這將確保你有每個實例抖功能,而不是共享一個。

+0

如果我的類繼承父類,我怎麼可以調用父類的構造? – gpopoteur 2015-03-13 11:13:00

+0

@gpopoteur http://stackoverflow.com/questions/11520116/calling-coffescript-super-methods – Oleg 2015-03-13 11:15:35

2

我想,你應該嘗試這樣的事情,而不是:

class SomeClass 
    constructor: -> 
    @click = _.debounce @_save, 600 

    _save: => 
    # ...