5

问题

假设我在 CS 中有以下课程

class Foo
  foo:
    one: 1
    two: 2

我想要一个class Bar extends Foo谁的foo财产归还{one: 1, two: 2, three: 3}。有没有一种方法可以在类定义中执行此操作,Bar因为我只附加three: 3到超类上已经存在的foo属性Foo

用例/解决方法

我很好奇是否可以做我上面解释过的事情。但是,由于我的用例,这不是一个阻塞问题,因为我可以使用 Coffeescript 的super调用通过使其成为一个函数来解决它。

我目前正在使用 Backbone,我有两个课程。一个继承自Backbone.Model第一个类,另一个继承自第一个类。在第一个类中,我设置了defaults属性,以便在创建此模型时,如果未传入,则设置实例变量。从我的第一个类继承的类有一个额外的键值对添加到该defaults对象如果我想覆盖默认值,情况也会一样。

Backbone 中对象的默认值是通过使用 Underscore 的result方法获得的,因此在这种情况下,快速解决方法是简单地创建defaults一个返回相同对象的函数。在 Coffeescript 中,这非常简单,变成:

class Foo
  foo: ->
    one: 1
    two: 2

然后Bar您可以执行以下操作:

class Bar extends Foo
  foo: ->
    _.extends super, three: 3 
4

1 回答 1

1

尽管在 CoffeeScript 中,super 关键字严格用于调用父方法,但该语言似乎并没有隐藏__super__“静态”变量。让我们充分利用它。

class Bar extends Foo
  foo: _.extend @__super__.foo, three: 3

上面类定义中的@指向Bar构造函数。Bar__super__属性似乎指的是Foo.

我想知道为什么 CoffeeScript 不只是将其视为super另一个this关键字,而是用于引用超类实例?

于 2013-09-06T23:28:04.637 回答