2

次のような Coffeescript クラスがあるとします。

class Foo
    aVar = 'foo'

    someFunction = ->
        anotherVar = 'bar'

anotherVar次のように、null として宣言せずにクラス変数として設定する方法はありますか。

class Foo
    aVar = 'foo'
    anotherVar = null

    someFunction = ->
        anotherVar = 'bar'
4

2 に答える 2

2

いいえ、できません。簡単なクラスを見てみましょう。

class C
    cv = null
    m: -> cv

これは、次の JavaScript に変換されます。

var C = (function() {
  var cv;
  function C() {}
  cv = null;
  C.prototype.m = function() {
    return cv;
  };
  return C;
})();

cv「プライベート クラス変数」は、ビルドする自己実行関数内の単なるローカル変数であることに気付くでしょうC。したがって、新しい「プライベート クラス変数」を に追加したい場合は、Cその無名関数のスコープを再度開いて、新しい変数を追加する必要があります。しかし、時間をさかのぼって、既に実行された関数のスコープを変更する方法はないので、運が悪いです。

anotherVaras を定義するときにasを定義する必要はありませんがnull、何かに初期化する必要があります。

于 2012-06-25T16:53:30.350 に答える
0

thisキーワードについて聞いたことがありますか?:) CoffeeScript は次のようにマップ@されthisます。

class Foo
    aVar = 'foo'

    someFunction: ->
        @anotherVar = 'bar'
于 2012-06-25T10:54:16.377 に答える