静态属性继承CoffeeScript

mag*_*tik 3 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()
Run Code Online (Sandbox Code Playgroud)

结果是:

blah
undefined
undefined
Run Code Online (Sandbox Code Playgroud)

如何@foo在继承的类中访问?

Tre*_*ham 5

你其实想写

console.log(@constructor.foo)
Run Code Online (Sandbox Code Playgroud)

Bar的构造函数.(这里的工作示例.)@constructor指向class(Bar),它继承了静态属性Foo.这些属性不在实例上,这是@构造函数指向的属性.

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

进一步澄清:在课堂上,@指向班级.在构造函数中,@指向实例.因此明显不一致.我在本书" CoffeeScript:Accelerated JavaScript Development"中的类章节中花了很多时间.