Coffeescript扩展课程而不覆盖或不得不称之为'超级'

时间:2015-12-17 12:26:32

标签: coffeescript

有些东西一直困扰着我,我可能很愚蠢,但这是我的问题:

class GenericModel extends Backbone.Model
  initialize: () ->
    console.log 'one'

class SpecificModel extends GenericModel
  initialize: () ->
    console.log 'two'

我希望它说“一二”,而只是说“两个”,这是预期的,因为初始化方法被覆盖。显然,我可以将SpecificModel调用super作为初始化的第一行,但是当在整个代码库中扩展具有许多其他类的类时,这可能变得相当丑陋,令人厌烦(我经常忘记这样做)。在我的真实案例中,我在泛型模型上有很多通用的事件绑定,然后是扩展它的模型上的特定操作代码,我宁愿不必在它们上面调用super,因为它只是让它很难跟踪绑定何时没有...绑定。

有没有办法让所有从类扩展继承的方法在其父级上自动调用super

由于

1 个答案:

答案 0 :(得分:0)

coffeescript中的两种方式

使用coffeescript超级捷径(参见http://coffeescript.org/#classes

class GenericModel extends Backbone.Model
  initialize:() ->
    console.log 'one'
class SpecificModel extends GenericModel
  initialize:() ->
    super()
    console.log 'two'

或通过原型直接调用重写方法

class GenericModel extends Backbone.Model
  initialize:() ->
    console.log 'one'
class SpecificModel extends GenericModel
  initialize:() ->
    GenericModel::initialize.call(@,arguments)
    console.log 'two'