我对CoffeeScript中@的使用感到困惑。我希望这可行,但它没有 -
obj=new class
@x:5
getX:->return @x
alert obj.getX() # undefined
另一方面,如果我们从@
移除@x:5
,那么它会以某种方式工作 -
obj=new class
x:5
getX:->return @x
alert obj.getX() # 5
我认为@x与this.x相似,但在第二种情况下,我没有定义@x。它为什么有效?
我应该何时定义@x:5
而不是x:5
?
答案 0 :(得分:1)
首先,您要定义“静态”x
和“非静态”getX
。在第二个实例中,成员和方法都是非静态的。
如果您为自己的课程命名,则可以将x
作为ClassName.x
访问第一个版本:
class TestClass
@x: 5
y: 6
obj = new TestClass
TestClass.x # 5
obj.y # 6
当你在一个类方法中时,通常应该只使用@
;在类声明中,this
所引用的@
可以被视为类本身。