在CoffeeScript中尝试在类中调用方法(@_methodName)时,它返回undefined

时间:2015-03-13 09:31:32

标签: javascript coffeescript underscore.js

我尝试在我的代码中使用underscore's debounce函数,并且我将我的类的方法作为第一个参数传递,但是_.debounce告诉我我&# 39; m传递undefined参数,其中函数应为。

class SomeClass

  click: _.debounce @_save, 600

  _save: =>
    # Save logic

另一方面,如果我这样做,它可以工作,但这个解决方案似乎有点难看。

class SomeClass

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

  _save: =>
    # Save logic

当我检查生成的两个函数的JS源代码时,似乎两者都应该正常工作,不知道我是否在这里错过了CoffeeScript中的内容。

2 个答案:

答案 0 :(得分:4)

CoffeeScript编译:

click: _.debounce @_save, 600

成:

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

请注意_save方法是SomeClass的静态属性,即它不在原型上,因为在您的声明中@指的是类本身,而不是它的实例。

或者,您可以在构造函数中声明您的单击函数:

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

这将确保每个实例都有一个去抖动功能,而不是共享功能。

答案 1 :(得分:2)

我想,你应该尝试这样的事情:

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

  _save: =>
    # ...