我想使用与静态方法'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编译它并且不可能这样做。
有什么想法吗?
答案 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: ->