我一直在读一些关于coffeescript的继承模型,我感觉到我处于意识形态辩论的边缘,我真的不明白。所以,我会非常高兴地发现我只是以错误的方式做事。Coffeescript中的静态方法和继承
基本上我正在做的是编写一组窗口小部件,其中包括需要处理其DOM元素上的事件。我认为一个很好的方法去做这件事,那就是有一个可以调用一次的类方法来委托widget可能需要的所有事件。基础小部件类可能有一些简单的点击处理程序,而子类可能会添加一些鼠标悬停处理程序或额外的点击处理程序。
但是,看起来我不应该试图在静态方法内调用super()
。有一个解决方法存在,但我已经看到很多建议,这不是做我想做的最好的方法。有没有人有任何见解我应该如何构造这段代码?Keep使用变通方法,还是把所有的委托放到一个完全不同的地方?我不能真的把它粘在原型中,因为我不一定有一个实例调用该方法(或者我基本上仍然可以调用一个方法?在原型从静态上下文,就像把SwatchableWidget.prototype.delegateEvents()
成一个onload函数或东西
下面是一些代码来说明什么我谈论:
class Widget
@testProp: "ThemeWidget"
@delegateEvents: ->
console.log "delegate some generic events"
class SwatchableWidget extends Widget
@testProp2 = "SwatchWidget"
@delegateEvents: ->
console.log "delegate some specific swatchable widget events"
this.__super__.constructor.delegateEvents()
Widget.delegateEvents()
SwatchableWidget.delegateEvents()
感谢您的HEL页。
我喜欢这个,但随后每派生类将需要显式调用它的父类的代表事件。如果每个父类名称都被更改,则需要手动更新委托事件和类似的调用。重读我自己的回答,我仍然不知道一个干净的方式来自动调用父类中的命名函数,超出了原作者的建议。 –