如何知道Coffeescript继承Class何时延伸?

时间:2013-02-18 21:10:52

标签: javascript inheritance backbone.js module coffeescript

我想使用与静态方法'inherited'相同的方法,正如您在文档中看到的那样,用于模块操作目的:

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

class Hey extends Foo

class Hou extends Foo

输出:

=> hey hou
=> hey hou

如何通过Coffeescript'extend'实现这一目标?我的意思是,如果我使用Backbone.js'extend'方法,我可以覆盖它..但是Coffeescript编译它并且不可能这样做。

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

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

但是,如果您确实需要它(例如,出于调试目的)而不必进行显式函数调用,您还可以在每个文件的开头重新定义CoffeeScript编译器生成的__extends函数。由于__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);
`

答案 1 :(得分:1)

不。

过去有这个,它被删除了。有些人想要它回来,但有关它如何工作的乐趣。

从源头上对此进行了一些参考:

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

class A extends B

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

  classBody: ->
  methods: ->
  goHere: ->