让我们定义这个简单的代码:
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
?
答案 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)
foo
是Foo
构造函数的属性,而不是其原型:
class Bar extends Foo
constructor: () ->
console.log(Foo.foo)
bar: () ->
console.log(Foo.foo)