静态属性继承CoffeeScript

时间:2012-05-25 18:38:25

标签: coffeescript

让我们定义这个简单的代码:

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

2 个答案:

答案 0 :(得分:5)

你其实想写

console.log(@constructor.foo)
{p}在Bar的构造函数中。 (工作示例here。)@constructor指向类(Bar),它继承了Foo的静态属性。这些属性不在实例上,这是@从构造函数指向的内容。

(是的,奇怪的是它是@constructor而不是@class,但那是因为obj.constructor是JavaScript主义,而不是特殊的CoffeeScript语法。)

进一步澄清:在课堂体内,@指向班级。在构造函数中,@指向实例。因此明显不一致。我在本书“em> CoffeeScript: Accelerated JavaScript Development ”中的课程章节中花了很多时间。

答案 1 :(得分:2)

fooFoo构造函数的属性,而不是其原型:

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