1

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

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

class B extends A
  @in = 20

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

B.w()

如果我“细箭头”Ab 的定义,则绑定到超时调用函数,因此 @in 未定义。当我对它进行粗箭头时,它会绑定到父类 A。我希望它绑定到子类 B,而无需重新定义子类中的方法。

谢谢

4

1 回答 1

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/

于 2013-02-12T00:57:34.207 回答