在coffeescript中使用闭包

时间:2013-12-25 06:51:08

标签: javascript coffeescript

我正在尝试在coffeescript中实现this SO question中的代码。

这是我所拥有的,但它不起作用。

class SomeClass

    initialize: ->

      target = view.$('#finder')

      typewatch = do ->
        timer = 0;
        (callback, ms) ->
          clearTimeout timer
          timer = setTimeout callback, ms

      target.keyup =>
        typewatch @someMethod(target.val()), 1000


    someMethod: (arg) ->
      // do something

someMethod毫无延迟地被召唤。似乎没有调用setTimeout。

1 个答案:

答案 0 :(得分:1)

@someMethod()语法会立即调用该方法。

如果要在变量中“存储”方法调用(粗略地,方法+ this +参数)并稍后调用它,请使用Function.prototype.bind。例如typewatch @someMethod.bind(@, target.val()), 1000

正如elclanrs所提到的那样,BT setTimeout (->callback)部分不会真正执行回调。