1
我有如下所示(顯著簡化本示例)兩個基類:CoffeeScript的類混入不工作的構造
class Foo
constructor: (@foo) ->
class Bar
constructor: (@bar) ->
然後,我有兩個另外的類來擴展/通過延伸它們提高這些類和添加功能:
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有密新構造函數和方法getHistory ..
我試圖與coffeescriptcookbook混入例如:http://coffeescriptcookbook.com/chapters/classes_and_objects/mixins
mixOf = (base, mixins...) ->
class Mixed extends base
for mixin in mixins by -1 #earlier mixins override later ones
for name, method of mixin::
Mixed::[name] = method
Mixed
所以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
我明白了,那麼有沒有辦法實現這個目標? – gratz
當然,你可以在Mixed構造函數中應用所有的mixin構造函數。 – mpm