【问题标题】:CoffeeScript - understanding "@"CoffeeScript - 理解“@”
【发布时间】:2012-06-13 21:15:18
【问题描述】:

我已经阅读了几篇关于 CoffeeScript OOP 的论文。从他们那里,我是否正确理解在 CoffeeScript 中使用 @ 登录(以及 JavaScript 中的 this 前缀):

  • for variables:使变量成为类实例的成员。每个实例都有自己的此类变量(非静态变量)
  • 对于“方法”:使方法成为静态的,这与它对变量的作用相反

对不起,我是 JS 和 CS 的菜鸟。他们的理念与我习惯的完全不同。

更新

以下是我阅读的信息的参考:

只需搜索static

【问题讨论】:

  • "for "methods": make methods static" - 我在任何地方都没有看到任何暗示这一点的东西。
  • 你有什么要问的吗?
  • @lanzz:是的,如果问题有点不清楚,抱歉,但正如原帖中所说:“我理解正确吗......”所以你可以说“是” , "no" 或其他关于该问题的内容,例如,我误解了那里的 static 这个词,这是可能的......

标签: javascript coffeescript


【解决方案1】:

在方法内部,@ 是 JavaScript 的 this,指向当前对象;当前对象取决于方法的调用方式,请参阅callapply 了解如何弄乱方法的@(又名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/

这些可能也很有趣:

【讨论】:

  • 完美答案!这就是我读过的所有论文所缺少的。
猜你喜欢
  • 2012-05-07
  • 1970-01-01
  • 2012-03-15
  • 2014-06-03
  • 1970-01-01
  • 1970-01-01
  • 2011-12-18
  • 1970-01-01
  • 2013-12-15
相关资源
最近更新 更多