【发布时间】:2013-02-11 23:16:35
【问题描述】:
我想在子类中更改回调函数的绑定,使下面的代码指示 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 是未定义的。当我对它进行粗箭头时,它会绑定到父类 A。我希望它绑定到子类 B,而无需重新定义子类中的方法。
谢谢
【问题讨论】:
-
一切都设置为使用类方法有什么特别的原因吗?你的
@in = 10有点像类变量,但不是真的。 -
是的,在这个特定的设计中有类方法和实例方法,我正在尝试用类方法来做到这一点。如果我使用实例方法,它的行为符合预期(在等效示例中我得到 20)。
-
class在 CoffeeScript 中有点谎言,真的没有这样的东西。您的@in = 10与A.in = 10相同,因此不涉及原型,因此在@b内解析@in时不使用继承关系。 -
确实,该类确实是“类-ish”,但是如果我在 A 中用细箭头定义 B,B.b() 确实返回 20:问题是,如果它是用细箭头定义的,那么它回调中没有正确的绑定。
标签: coffeescript