让我们定义这个简单的代码:
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
在继承的类中访问?
让我们定义这个简单的代码:
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
在继承的类中访问?
你真的想写
console.log(@constructor.foo)
inBar
的构造函数。(这里的工作示例。)@constructor
指向类 ( Bar
),它继承了Foo
. 这些属性不在实例上,这是@
构造函数所指向的。
(是的,它是@constructor
而不是很奇怪@class
,但那是因为obj.constructor
它是 JavaScript 主义,而不是特殊的 CoffeeScript 语法。)
进一步澄清:在类主体中,@
指向类。在构造函数中,@
指向实例。因此明显的不一致。我在《CoffeeScript: Accelerated JavaScript Development 》一书中的类一章中花了很多时间来解决这个问题。
foo
是Foo
构造函数的属性,而不是其原型:
class Bar extends Foo
constructor: () ->
console.log(Foo.foo)
bar: () ->
console.log(Foo.foo)