javascript - CoffeeScript - 理解 "@"

标签 javascript coffeescript

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

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

我是 JS 和 CS 的菜鸟,抱歉。他们的哲学与我习惯的完全不同。

更新

以下是我阅读过的信息的引用资料:

只需搜索static

最佳答案

在方法内部,@ 是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/

这些可能也很有趣:

关于javascript - CoffeeScript - 理解 "@",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10972100/

相关文章:

javascript - 无法访问 Requirejs 模块内的另一个类

javascript - Socket.io 每次发射都失败

javascript - Angular 2.0 CLI 项目中 div 元素上的自定义滚动条?

javascript 回调参数未定义

javascript - Qtip2 工具提示不定位

javascript - 在 CoffeeScript 中使用两个异步函数进行 Promise

django - Backbone js 与 django 一起使用有什么优势

php - 通过一个 php 文件包含许多 .js 文件是一种好的做法吗?

javascript - getElementById 仅对动态创建的表返回 null

javascript - 对象组件