2013年5月26日日曜日

[CoffeeScript]クラスメソッドとクラス変数

CoffeeScriptでは、クラス内の変数に「@」をつけて宣言するとクラスメソッドになる。

class Hoge
  #クラスメソッド
  @classMethod = (param) ->
    "param is #{param}."

  #クラス変数
  @count = 0

  constructor: ->
    # コンストラクタ内で、クラス変数の値をインクリメント
    Hoge.count += 1;

console.log Hoge.classMethod "パラメータ"

new Hoge();
console.log Hoge.count
new Hoge();
console.log Hoge.count

実行結果

param is パラメータ.
1
2

JavaScriptへの変換結果

クラスメソッドや変数は、CoffeeScriptで定義したクラスに対応するfunctionのプロパティとして宣言される。
var Hoge;

Hoge = (function() {

  Hoge.classMethod = function(param) {
    return "param is " + param + ".";
  };

  Hoge.count = 0;

  function Hoge() {
    Hoge.count += 1;
  }

  return Hoge;

})();

console.log(Hoge.classMethod("パラメータ"));

new Hoge();

console.log(Hoge.count);

new Hoge();

console.log(Hoge.count);