1

这是我的咖啡脚本代码。

class Hello
  constructor: ->
    @greetings()
    this.greetings()
    greetings()

  greetings: ->
    alert 'hello world'

new Hello

这段代码翻译成

var Hello;

Hello = (function() {

  function Hello() {
    this.greetings();
    this.greetings();
    greetings();
  }

  Hello.prototype.greetings = function() {
    return alert('hello world');
  };

  return Hello;

})();

new Hello;

在咖啡脚本代码的第三种情况下,我既不使用@也不使用this. 我假设咖啡脚本会使用隐含的 this,但事实并非如此。

我做了一个快速的谷歌搜索,但没有得到任何结果。所以任何人都可以确认coffeescript不支持隐式这个。

4

1 回答 1

4

Coffeescript 不支持隐式this。主要是因为咖啡脚本实际上只是 javascript 的糖,而在 javascript 中这将是一个非常糟糕的主意,因为函数是第一类对象并且可以分配给局部变量。

那么如何访问局部变量呢?

a = -> 123
@a = -> 456

// normal coffeescript
a() # 123

// with implicit this
a() # 123 or 456? Impossible to know.

重要的是要记住,在 java 脚本中var a;this.a彼此没有关系,并且始终是 2 个单独的变量。知道什么时候你在解决什么是真正重要的。

最后,这就是@创建符号的原因。在 javascript 中使用基于类的样式时,到处引用thiswiththis.propName的属性变得非常普遍。 @以这种方式编程时,添加到咖啡脚本中将不那么乏味和烦人。

于 2012-08-06T17:27:01.527 回答