我试图在我的代码中使用 underscore's debounce 函数,并且我将我的类的一个方法作为第一个参数传递,但是 _.debounce 告诉我我正在传递一个 undefined 参数,该参数应该在函数所在的位置。

class SomeClass

  click: _.debounce @_save, 600

  _save: =>
    # Save logic

另一方面,如果我这样做,它可以工作,但是这个解决方案看起来有点难看。
class SomeClass

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

  _save: =>
    # Save logic

当我检查两个函数生成的 JS 源时,似乎两者都应该可以正常工作,不知道我是否在这里遗漏了 CoffeeScript 中的某些内容。

最佳答案

CoffeeScript 编译:

click: _.debounce @_save, 600

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

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

或者,您可以在构造函数中声明单击函数:
constructor: ->
  @click = _.debounce @_save, 600

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

关于javascript - 在 CoffeeScript 中尝试调用类中的方法 (@_methodName) 时,它返回 undefined,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29028827/

10-13 02:21