CoffeeScript で @ をクラス名とかメソッド名の頭につけたときの話

こんにちは。ジンギスカンキャラメルをたべました、きたけーです。

この前、読んでいたCoffeeScriptのコードで @ がクラス名とかメソッド名の頭についてて、普段あまり見かけないのでびっくりしてしまった。以下みたいなかんじ。

class @Foo
  @bar: ->
    console.log "baz"

冷静に考えたら、@ は this なので、Fooは(ブラウザだと)windowオブジェクトのプロパティになって、barはFooオブジェクトのプロパティになるのだろうな、と推測。

生成されるコードをみたら、合っていた。

// Generated by CoffeeScript 1.8.0
(function() {
  this.Foo = (function() {
    function Foo() {}

    Foo.bar = function() {
      return console.log("baz");
    };

    return Foo;

  })();

}).call(this);

クラス名の頭に@をつけないとスコープが無名関数の中で閉じちゃうので、クラスをグローバルに参照したいときに使って、メソッド名の頭の@は、メソッドをクラスメソッドとして定義するつもりで使うのだろうなぁ。