Aar*_*ron 5 javascript inheritance coffeescript
假设我在CS中有以下课程
class Foo
foo:
one: 1
two: 2
Run Code Online (Sandbox Code Playgroud)
我想要归还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
Run Code Online (Sandbox Code Playgroud)
然后Bar你可以做以下事情:
class Bar extends Foo
foo: ->
_.extends super, three: 3
Run Code Online (Sandbox Code Playgroud)
尽管在 CoffeeScript 中,super 关键字严格用于调用父方法,但该语言似乎并没有隐藏__super__“静态”变量。让我们充分利用它。
class Bar extends Foo
foo: _.extend @__super__.foo, three: 3
Run Code Online (Sandbox Code Playgroud)
上面的类定义@中的 指向Bar构造函数。Bar的__super__属性似乎是指 的一个实例Foo。
我想知道为什么 CoffeeScript 不只是super像另一个this关键字一样对待,而是引用超类实例?