假设我在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
答案 0 :(得分:1)
虽然在CoffeeScript中,super关键字严格用于调用父方法,但该语言似乎并未隐藏__super__
“静态”变量。让我们充分利用它。
class Bar extends Foo
foo: _.extend @__super__.foo, three: 3
上面类定义中的@
指向Bar
构造函数。 Bar
的{{1}}属性似乎是指__super__
的一个实例。
我想知道为什么CoffeeScript不像其他Foo
关键字一样对待super
,而是为了引用超类实例?