Javascript Coffeescript类mixin不适用于构造函数
我有两个基类,如下所示(本例大大简化): 然后,我有另外两个类,它们通过扩展这些类并添加功能来扩展/增强这些类:Javascript Coffeescript类mixin不适用于构造函数,javascript,inheritance,constructor,coffeescript,mixins,Javascript,Inheritance,Constructor,Coffeescript,Mixins,我有两个基类,如下所示(本例大大简化): 然后,我有另外两个类,它们通过扩展这些类并添加功能来扩展/增强这些类: class NewFoo extends Foo getFoo: -> @foo class NewBar extends Bar getBar: -> @bar 但是,我也希望NewFoo和NewBar继承一个公共构造函数/其他方法,例如 class Mixin constructor: (x) -> @history =
class NewFoo extends Foo
getFoo: ->
@foo
class NewBar extends Bar
getBar: ->
@bar
但是,我也希望NewFoo和NewBar继承一个公共构造函数/其他方法,例如
class Mixin
constructor: (x) ->
@history = 'something'
super x
getHistory: ->
@history
我试图让NewFoo和NewBar拥有Mixin构造函数和getHistory方法
我尝试使用coffeescriptcookbook mixin示例:
因此,NewFoo/NewBar成为:
class NewFoo extends mixOf Mixin, Foo
getFoo: ->
@foo
class NewBar extends mixOf Mixin, Bar
getBar: ->
@bar
但是,这不起作用,并且失败,出现错误:
TypeError:无法读取未定义的属性“构造函数”
如何让NewFoo/NewBar继承公共Mixin成员及其各自的基类
编辑:
到目前为止,我只能想到以下几点:
class Foo
constructor: (@foo) ->
class Bar
constructor: (@bar) ->
history = (base) ->
class History extends base
constructor: (param) ->
@history = 'something'
super param
getHistory: ->
@history
History
class NewFoo extends history Foo
getFoo: ->
@foo
class NewBar extends history Bar
getBar: ->
@bar
newFoo = new NewFoo 'a foo'
console.log newFoo.getFoo()
console.log newFoo.history
您基本上是通过Mixin实现的:
class Mixin
constructor:->
super
如果调用new Mixin()代码>您将得到一个错误。不能对不扩展任何内容的构造函数调用super
mixOf函数没有解决这个问题,它只是从其他对象复制方法并生成一个类。我明白了,那么有没有办法实现这一点?当然,可以在混合构造函数中应用所有mixin构造函数。
class Foo
constructor: (@foo) ->
class Bar
constructor: (@bar) ->
history = (base) ->
class History extends base
constructor: (param) ->
@history = 'something'
super param
getHistory: ->
@history
History
class NewFoo extends history Foo
getFoo: ->
@foo
class NewBar extends history Bar
getBar: ->
@bar
newFoo = new NewFoo 'a foo'
console.log newFoo.getFoo()
console.log newFoo.history
class Mixin
constructor:->
super