我想更改子类中回调函数的绑定,以便以下代码指示 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,而无需重新定义子类中的方法。
谢谢
我想更改子类中回调函数的绑定,以便以下代码指示 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,而无需重新定义子类中的方法。
谢谢
我认为您能做的最好的事情就是在设置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/