【发布时间】:2013-08-31 19:03:46
【问题描述】:
问题
假设我在 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
【问题讨论】:
-
我猜你可以创建一个以
Foo.foo为原型的新对象,并添加three: 3属性。不会像在语法上添加three: 3那样简洁,但从概念上讲,我认为这是您要寻找的。span>
标签: javascript inheritance coffeescript