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")

非機能defaultsをそのままにしておくこともできますがAnimal、それは見苦しくなるので気にしないでください。

は最初の引数を変更することに注意してください。そのため、通常、自分が所有していないものへの落書きを避ける_.extendなどのことを言いたいと思うでしょう。_({}).extend(...)この場合、Animal#defaultsが呼び出されるたびに新しいオブジェクトを返すことがわかっているので、それについて心配する必要はありません。あなたが偏執狂的であれば、代わりにこれを行うことができます:

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

デモ: http://jsfiddle.net/ambiguous/LETAc/

于 2013-01-25T18:25:10.223 に答える