coffeescript - Coffeescript 中的静态方法和继承

标签 coffeescript

我一直在阅读一些关于 coffeescript 的继承模型的内容,我感觉自己正处于一场我真的不理解的意识形态辩论的边缘。所以,我会非常高兴地发现我只是以错误的方式做事。

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

但是,看来我不应该尝试做相当于调用 super() 的操作。在静态方法中。存在一种解决方法,( this.__super__.constructor.METHODNAME() 但我看到很多建议说这不是做我想做的事情的最佳方法。有没有人对我应该如何构建这段代码有任何见解? 继续使用解决方法,还是将所有委托(delegate)放到一个完全不同的地方?我真的不能把它放在原型(prototype)中,因为我不一定有一个实例来调用该方法(或者我基本上仍然可以调用静态上下文中原型(prototype)上的方法,例如将 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 调用静态方法(并且没有多大意义)

关于coffeescript - Coffeescript 中的静态方法和继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6689519/

相关文章:

javascript - 是否可以通过 `do` 关键字调用对象的方法?

compilation - coffeescript:为什么 "str".replace(//g, "") 给出coffeescript 编译错误?

javascript - 简单的 CoffeeScript for 循环从 End 到 0

coffeescript - 如何仅在需要时使用grunt-contrib-watch和grunt-contrib-coffee编译CoffeeScript?

javascript - 让 JavaScript 变得漂亮的最重要技巧

metaprogramming - CoffeeScript动态方法

sql - CoffeeScript,寻找类似 SQL 的模块

validation - Node.js 数据访问层中的错误处理

javascript - 设置/覆盖背景颜色时的 jQuery/CSS 优先级

javascript - Node.js 中的 glob 并仅返回匹配项(无前导路径)