Coffeescript 中的静态方法和继承



我最近读了一些关于coffeescript的继承模型的文章,我感觉我正处于一场我真的不理解的意识形态辩论的边缘。所以,如果我发现我只是用错误的方式做事,我会非常高兴的。

基本上我正在做的是编写一组小部件,除其他事项外,需要处理其DOM元素上的事件。我认为这样做的一个好方法是有一个类方法,它将被调用一次,委派小部件可能需要的所有事件。小部件基类可能有一些简单的单击处理程序,而子类可能会添加一些鼠标悬停处理程序或额外的单击处理程序。

然而,似乎我不应该尝试在静态方法中调用super()。有一个变通的存在,(this.__super__.constructor.METHODNAME()但我已经看到了很多建议,这不是最好的方式来做我想做的事情。有人对我应该如何构建这段代码有什么见解吗?继续使用变通方法,还是将所有委托放在一个完全不同的地方?我不能真的只是把它粘在原型中,因为我不一定有一个实例来调用方法(或者我基本上仍然可以从静态上下文中调用原型上的方法,比如把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()

谢谢你的帮助

我建议替换

this.__super__.constructor.delegateEvents()

Widget.delegateEvents()

尝试使用super调用静态方法是不必要的(也没有多大意义)

我不明白为什么delegateEvents会是一个类级别的方法,或者为什么Widget.delegateEvents必须从SwatchableWidget.delegateEvents再次调用。如果它只是类初始化代码,则应该将其直接放在类主体中:

class Widget
    console.log "delegate some generic events"
    ...
    @testProp: "ThemeWidget"
class SwatchableWidget extends Widget
    console.log "delegate some specific swatchable widget events"
    ...
    @testProp2 = "SwatchWidget"

我认为你在运行这个初始化代码之前等待一个特定的DOM状态?如果你能多告诉我一些delegateEvents的先决条件,也许我可以建议另一种方法。

听起来您想要一种不同类型的继承模型,其中每个特定类型的继承函数("父调用")将遍历继承树并调用所有具有相同名称的父函数。

您可以像您所写的那样手动调用每个子函数中的任何直接父函数。然后,它将沿着继承链向上浮动到指定这种关系的任何位置。

我将在构造函数中将父类委托调用绑定到当前类函数

delegateparents => 
  #call any parent class methods

最新更新