3

この単純なコードを定義しましょう:

class Foo
  @foo = 'blah'
  console.log(@foo)

class Bar extends Foo
  constructor: () ->
    console.log(@foo)

  bar: () ->
    console.log(@foo)

b = new Bar
b.bar()

結果は次のとおりです。

blah
undefined
undefined

@foo継承されたクラスにアクセスするにはどうすればよいですか?

4

2 に答える 2

5

あなたは実際に書きたい

console.log(@constructor.foo)

inBarのコンストラクター。(実際の例はこちら。)は、 の静的プロパティを継承する@constructorクラス ( ) を指します。これらのプロパティはインスタンス上にありません。これは、コンストラクターからのポイントです。BarFoo@

(はい、それが@constructorではなくというのは奇妙ですが、それは特別な CoffeeScript 構文ではなく、JavaScript 主義だからです。@class)obj.constructor

さらに明確にするために:クラス本体で、クラスを@指します。コンストラクターでは@、インスタンスを指します。したがって、明らかな矛盾。これについては、著書CoffeeScript: Accelerated JavaScript Developmentのクラスに関する章で多くの時間を割いています。

于 2012-05-25T18:41:49.197 に答える
2

fooFooプロトタイプではなく、コンストラクターのプロパティです。

class Bar extends Foo
  constructor: () ->
    console.log(Foo.foo)
  bar: () ->
    console.log(Foo.foo)
于 2012-05-27T01:58:24.113 に答える