2

我希望使用与 Ruby 提供的静态方法 “继承”相同的方法,正如您在其文档中看到的用于模块操作目的的方法:

class Foo
  @inherited: (subclass) ->
    console.log('hey hou')

class Hey extends Foo

class Hou extends Foo

输出:

=> hey hou
=> hey hou

我怎样才能用 Coffeescript 'extends' 做到这一点?我的意思是,如果我使用 Backbone.js 'extend' 方法,我可以覆盖它.. 但是 Coffeescript 编译它,这是不可能的。

有什么想法吗?

4

2 回答 2

2

亚历克斯韦恩的回答是完全合法的,也是正确的做法。

但是,如果您确实需要它(例如,出于调试目的)而不必进行显式函数调用,您也可以__extends在每个文件的开头重新定义由 CoffeeScript 编译器生成的函数。由于__extends是 CoffeeScript 中的保留关键字,因此必须在纯 JavaScript 中重新定义它并使用反引号嵌入到 CoffeeScript 文件中:

`
__extends = (function (extend) {
    return function (child, parent) {
        // Do actual heritage
        var result = extend(child, parent);
        // Do something with child or parent
        if (parent.inherited instanceof Function) parent.inherited(child);
        // Return the result as in the original '__extends' function
        return result;
    }
})(__extends);
`
于 2014-01-23T15:00:52.897 回答
1

没有。

以前有这个,删了。有些人想把它放回去,但它需要如何工作却很奇怪。

从源头对此的一些参考:

建议的解决方法依赖于子类的显式调用。

class A extends B

  # child class calls extended hook of parent class explicitly.
  B.extended(this)

  classBody: ->
  methods: ->
  goHere: ->
于 2013-02-18T21:41:30.040 回答