foo.coffee
foo = () ->
...
を JavaScript に変換すると、通常は次のようにラップされたコードが出力される。
foo.js
(function() {
foo = function() {
...
};
}).call(this);
このため foo() は外から呼び出すことができない。
foo() を呼び出せるようにするには次のいずれかの方法がある。
変換時に --bare オプションを指定する方法
$ coffee --bare -c foo.coffee
ラップされないコードが出力されるが、全てグローバルスコープに展開されるのであまり良くない。
foo.js
var foo;
foo = function() {
...
};
関数定義を変更する方法
関数定義を次のように変更する。
foo.coffee
@foo = () ->
...
これにより出力される JavaScript コードは次のようになる。
foo.js
(function() {
this.foo = function() {
...
};
}).call(this);
this == window なので、結果的に関数 foo はグローバルスコープにエクスポートされる。
クラスのエクスポート
クラス名の前に @ を付けるだけ
class @Klass
...