鉴于我在 coffeescript 中有以下继承。
我得到一个错误,因为“哺乳动物”似乎没有为 myCat 定义。
我在其他一些帖子中读到,我实际上必须将 defaults 设置为一个函数来继承默认值。但是我如何使用 coffeescript 做到这一点?
class Animal extends Backbone.Model
defaults:
mammal: true
class Cat extends Animal
defaults:
furColor: "gray"
myCat = new Cat
alert(myCat.get('mammal'))
最佳答案
最简单的方法是为 defaults
使用函数,然后你的 Cat
可以简单地调用 super
并添加一些东西:
class Animal extends Backbone.Model
defaults: ->
mammal: true
class Cat extends Animal
defaults: ->
_(super()).extend(furColor: "gray")
您可以在 Animal
中保留非功能性 defaults
,但这会变得丑陋,所以请不要打扰。
请注意 _.extend
改变它的第一个参数,所以通常你想说类似 _({}).extend(...)
的东西,以避免在你不拥有的东西上涂鸦。在这种情况下,您知道每次调用 Animal#defaults
时都会返回一个全新的对象,因此您不必担心。如果你是偏执狂,你可以这样做:
defaults: ->
_({}).extend(super(), furColor: 'gray')
关于inheritance - 如何在使用 Coffeescript 时扩展主干模型并保持默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14524276/