JavaScript
CoffeeScript
class

CoffeescriptのClassの作り方メモ

More than 5 years have passed since last update.


  • 間違ってそうだけど、メモを残してみる。

  • :: (ダブルコロン)の意味がprototypeということで追記してみた。


Sample class


hoge.coffee

class Hoge

# static public parameter / constants
@classParam = "hoge" # Hoge.classParam
@CONST = 1 # Hoge.CONST

# prototype parameter
prototypeParam : 0 # Hoge.prptotype.prototypeParam
Hoge::prototypeParam2 = 0 # Hoge.prototype.prototypeParam2

# static private parameter
_privateParam = 0 # var _privateParam

# static public method
@classMethod : (param)-> # Hoge.classMethod = function(param){...}
alert param

# constructor
constructor: (@instanceParam) -> # Hoge = function(instanceParam){...}
@instanceParam2 = ""

# public method
instanceMethod: (param) -> # Hoge.prototype.instanceMethod(param){...}
@instanceParam = param

# static private method # var _privateMethod = function(){...}
_privateMethod = ->
_privateParam++



static public parameter / constants


  • @を付けたパラメータは、Hoge.classParam = "hoge";のように展開される。

  • =と:で差異はない。

  • classの定数を定義する場合もこの方法を用いる。定数は全て大文字とする。


prototype parameter


  • @無しで:で定義したパラメータはHoge.prototype.prototypeParam = 0;の様に展開される。

  • Hoge:: に続けて定義しても同じ意味になる。値は=で設定する。

  • 使用しない方がいい。constructorで@付き変数を定義するようにする。


static private parameter


  • @無しで=で定義したパラメータはvar _privateParam = 0;の様に展開される。

  • staticなprivate変数なので、値はインスタンス間で共有される。

  • staticでないprivate変数は対応が難しいので、constructorで@付き変数を用意して、外部から使わないようにするのがいいと思われる。


static public method


  • @付きのmethodは、Hoge.classMethod = function(param){...}のように展開される。

  • =と:で差異はない。


constructor


  • @付きの引数は、インスタンスのパラメータとして初期化される。this.instanceParam = instanceParam;の様に展開される。

  • 引数以外のインスタンスパラメータはconstructor内で@付きで宣言する。this.instanceParam2 = "";の様に初期化される。


public method


  • :で宣言したmethodは、Hoge.prototype.instanceMethod = function(param){...}の様に展開される。

  • constructorでなくても、@付きの引数や、@付きの変数を使用できる。thisに変数が追加される。


static private method


  • =で宣言したmethoは、var _privateMethod = function(){...}の様に展開される。

  • public methodからそのまま実行した場合、staticなmethodなので、インスタンスのthisにはアクセスできない。_privateMethod.call(this);の様にする。