我想更改子类中回调函数的绑定,以便下面的代码表示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,而不重新定义子类中的方法。
由于
答案 0 :(得分:1)
我认为您可以做的最好的事情是在设置setTimeout
电话时手动强制执行相应的绑定。在=>
中定义@b
时删除A
:
class A
#...
@b: -> alert(@in)
然后在致电B
时在setTimeout
设置绑定:
class B extends A
#...
@w: ->
f = => @b()
window.setTimeout(f, 500)
我认为这与使用CoffeeScript的伪类方法一样接近。