coffeescript如何设置绑定"在父类中定义的回调函数中的子类

时间:2013-02-11 23:16:35

标签: coffeescript

我想更改子类中回调函数的绑定,以便下面的代码表示20而不是10:

class A 
  @in = 10
  @b: =>
    alert(@in)

class B extends A
  @in = 20

  @w: ->
    window.setTimeout(@b,500)

B.w()

如果我'瘦箭'是A.b的定义,那么绑定是超时调用函数所以@in是未定义的。当我胖它时,它会绑定到父类A.我希望它绑定到子类B,而不重新定义子类中的方法。

由于

1 个答案:

答案 0 :(得分:1)

我认为您可以做的最好的事情是在设置setTimeout电话时手动强制执行相应的绑定。在=>中定义@b时删除A

class A 
  #...
  @b: -> alert(@in)

然后在致电B时在setTimeout设置绑定:

class B extends A
  #...
  @w: ->
    f = => @b()
    window.setTimeout(f, 500)

我认为这与使用CoffeeScript的伪类方法一样接近。

演示:http://jsfiddle.net/ambiguous/Y6S8D/