5

質問

CSに次のクラスがあるとしましょう

class Foo
  foo:
    one: 1
    two: 2

プロパティが返される が必要class Bar extends Fooです。スーパークラスの既存のプロパティに追加するだけのクラス定義でこれを行う方法はありますか?foo{one: 1, two: 2, three: 3}Barthree: 3fooFoo

ユースケース/回避策

上で説明したようなことができるかどうか、興味があります。ただし、私の使用例では、Coffeescript のsuper呼び出しを使用して関数にすることで回避できるため、ブロックの問題ではありません。

私は現在バックボーンを使用しており、2 つのクラスがあります。1 つBackbone.Modelは最初のクラスから継承し、もう 1 つは最初のクラスから継承します。最初のクラスではdefaults、このモデルの作成時にインスタンス変数が渡されない場合にインスタンス変数が設定されるようにプロパティを設定しています。最初のクラスから継承するクラスには、このdefaultsオブジェクトに追加する追加のキーと値のペアがありますデフォルトを上書きしたい場合も同じ状況になります。

Backbone のオブジェクトのデフォルト値は Underscore のresultメソッドを使用して取得されるため、この場合の簡単な回避策defaultsは、同じオブジェクトを返す関数を単純に作成することです。Coffeescript では、これは信じられないほど簡単で、次のようになります。

class Foo
  foo: ->
    one: 1
    two: 2

そしてBar、次のことができます。

class Bar extends Foo
  foo: ->
    _.extends super, three: 3 
4

1 に答える 1

1

CoffeeScript では、親メソッドを呼び出すために super キーワードが厳密に使用されていますが、言語は__super__「静的」変数を隠しているようには見えません。存分に活用していきましょう。

class Bar extends Foo
  foo: _.extend @__super__.foo, three: 3

上記のクラス定義の は、コンストラクター@を指しています。のプロパティが のインスタンスを参照しているようです。BarBar__super__Foo

なぜ CoffeeScript はsuper別のthisキーワードのように扱わず、スーパー クラスのインスタンスを参照するのだろうか?

于 2013-09-06T23:28:04.637 に答える