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指向类 ( Bar),它继承了Foo. 这些属性不在实例上,这是@构造函数所指向的。

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

进一步澄清:在类主体中,@指向类。在构造函数中,@指向实例。因此明显的不一致。我在《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 回答