coffeescript如何设置装订“;指向父类中定义的回调函数中的子类

coffeescript如何设置装订“;指向父类中定义的回调函数中的子类,coffeescript,Coffeescript,我想更改子类中回调函数的绑定,以便以下代码指示20,而不是10: class A @in = 10 @b: => alert(@in) class B extends A @in = 20 @w: -> window.setTimeout(@b,500) B.w() 如果我使用“thin arrow”来定义A.b,那么绑定到超时调用函数,因此@in是未定义的。当我对它进行fat箭头标记时,它绑定到父类A。我希望它绑定到子类B,而无需在子类中重

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

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

class B extends A
  @in = 20

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

B.w()
如果我使用“thin arrow”来定义A.b,那么绑定到超时调用函数,因此@in是未定义的。当我对它进行fat箭头标记时,它绑定到父类A。我希望它绑定到子类B,而无需在子类中重新定义方法


谢谢

我认为,在设置
设置超时
调用时,最好是手动强制执行相应的绑定。在
A
中定义
@b
时,请删除
=>

class A 
  #...
  @b: -> alert(@in)
然后在调用
setTimeout
时在
B
中设置绑定:

class B extends A
  #...
  @w: ->
    f = => @b()
    window.setTimeout(f, 500)
我认为这是使用CoffeeScript的伪类方法可以得到的最接近的结果


演示:

我认为最好的方法是在设置
setTimeout
调用时手动强制执行适当的绑定。在
A
中定义
@b
时,请删除
=>

class A 
  #...
  @b: -> alert(@in)
然后在调用
setTimeout
时在
B
中设置绑定:

class B extends A
  #...
  @w: ->
    f = => @b()
    window.setTimeout(f, 500)
我认为这是使用CoffeeScript的伪类方法可以得到的最接近的结果


演示:

有什么特别的原因使一切都设置为使用类方法吗?你的
@in=10
有点像一个类变量,但不是真的。是的,在这个特殊的设计中有类方法和实例方法,我正试图用类方法来实现这一点。如果我使用实例方法,它的行为与预期的一样(在等效示例中,我得到了20个)。
class
有点像CoffeeScript中的谎言,实际上没有这样的东西。您的
@in=10
与表示
A.in=10
相同,因此在
@b
内部解析
@in
时没有涉及原型,因此没有要使用的继承关系如果我在A中使用细箭头定义B,是否返回20:问题是,如果使用细箭头定义B,那么它在回调中没有正确的绑定。是否有任何特殊原因使所有内容都设置为使用类方法?你的
@in=10
有点像一个类变量,但不是真的。是的,在这个特殊的设计中有类方法和实例方法,我正试图用类方法来实现这一点。如果我使用实例方法,它的行为与预期的一样(在等效示例中,我得到了20个)。
class
有点像CoffeeScript中的谎言,实际上没有这样的东西。您的
@in=10
与表示
A.in=10
相同,因此在
@b
内部解析
@in
时没有涉及原型,因此没有要使用的继承关系如果在A中使用细箭头定义B,则返回20:问题是,如果使用细箭头定义B,则回调中没有正确的绑定。