3

CoffeeScript では、クラス コンストラクターでインスタンス プロパティを定義すると、そのプロパティはその定義で他のインスタンス プロパティを参照できます。次に例を示します。

class Foo
    constructor: (data) ->

        @One = 1

        @Two = @One + 1

しかし、クラス レベルで宣言されたインスタンス プロパティはどうでしょうか。以下は機能しません。

class Foo

    One: 1

    Two: @One + 1

そのコンテキストでは、@ 記号はインスタンスではなく「クラス」自体を指します。同様に、単に @ を削除しても機能しません。

クラス レベルで宣言された 1 つのインスタンス プロパティが、その定義で別のインスタンス プロパティを参照できる方法はありますか?

4

2 に答える 2

4

あなたがこれを言うとき:

class Foo
    one: 1

のプロトタイプを設定oneしてFooいるので、 のプロトタイプを見て、次@の場所に戻る必要がoneあります。

class Foo
    one: 1
    two: @::one + 1

デモ

これはサブクラスでも機能するため、次のようにします。

class Pancakes extends Foo
    three: @::two + 1

期待される3つが得られます。

于 2012-10-19T00:50:27.083 に答える
1

はい、そのために補助変数を使用できます。

class Foo
  uno = 1
  One: uno
  Two: uno + 1

(変数を呼び出すこともできますOne。プロパティと区別するために別の名前を使用しただけです)

ただし、これらのプロパティは Foo の「クラス」自体ではなく、Foo のプロトタイプにあることに注意してください。生成された JS は次のとおりです。

var Foo;

Foo = (function() {
  var uno;

  function Foo() {}

  uno = 1;

  Foo.prototype.One = uno;

  Foo.prototype.Two = uno + 1;

  return Foo;

})();

それらをクラス プロパティにしたい場合は、クラス レベルで @ を使用できます。

class Foo
  @One = 1
  @Two: @One + 1

そうすれば、Foo.OneおよびとしてアクセスできますFoo.Two

于 2012-10-19T00:49:41.887 に答える