我已经阅读了几篇关于 CoffeeScript OOP 的论文。从他们那里,我是否正确理解了在 CoffeeScript 中使用 @
符号(以及在 JavaScript 中使用 this
前缀):
- 对于变量:使变量成为类实例的成员。每个实例都有自己的变量(非静态变量)
- 对于“方法”:使方法成为静态的,这与它对变量的作用相反
我是 JS 和 CS 的菜鸟,抱歉。他们的哲学与我习惯的完全不同。
更新
以下是我阅读过的信息的引用资料:
只需搜索static
。
最佳答案
在方法内部,@
是JavaScript 的this
,指向当前对象;当前对象取决于调用方法的方式,参见 call
和 apply
了解如何处理方法的 @
(又名 this
);你也可以use =>
to bind a method到 CoffeeScript 中的一个对象。
如果你说 @p = 11
,这与 this.p = 11
相同,并使 p
在该对象中可用。
在类定义中,@
指的是类本身。所以这个:
class C
@m: -> ...
定义一个类方法,你可以说 C.m()
来执行它。
考虑这个例子:
class C
a: -> @p = 11
b: -> console.log(@p)
@c: -> console.log('Class method')
C.c() // This calls the class method.
o = new C
o.b() // There is no 'o.p' yet.
o.a() // This sets 'o.p'.
o.b() // And now we see an 'o.p'.
console.log(o.p) // And we see o.p here as well.
这将在控制台中为您提供以下输出:
Class method
undefined
11
11
演示:http://jsfiddle.net/ambiguous/DFcRt/
这些可能也很有趣:
关于javascript - CoffeeScript - 理解 "@",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10972100/