3

鉴于我在咖啡脚本中有以下继承。

我收到一个错误,因为 myCat 似乎未定义“哺乳动物”。

我在其他一些帖子中读到,我实际上必须将默认值设为一个函数来继承默认值。但是我如何用咖啡脚本做到这一点?

class Animal extends Backbone.Model
  defaults:
    mammal: true

class Cat extends Animal
  defaults:
    furColor: "gray"

myCat = new Cat
alert(myCat.get('mammal'))
4

1 回答 1

3

最简单的方法是对两者都使用函数defaults,然后您Cat可以简单地调用super并添加一些东西:

class Animal extends Backbone.Model
  defaults: ->
    mammal: true

class Cat extends Animal
  defaults: ->
    _(super()).extend(furColor: "gray")

您可以保留非功能defaultsAnimal但这会变得丑陋,所以不要打扰。

请注意,它_.extend改变了它的第一个参数,所以通常你想说一些话,比如_({}).extend(...)避免在你不拥有的东西上乱涂乱画。在这种情况下,您知道Animal#defaults每次调用它都会返回一个全新的对象,因此您不必担心。如果你是偏执狂,你可以这样做:

defaults: ->
  _({}).extend(super(), furColor: 'gray')

演示:http: //jsfiddle.net/ambiguous/LETAc/

于 2013-01-25T18:25:10.223 回答