- 間違ってそうだけど、メモを残してみる。
- :: (ダブルコロン)の意味が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);の様にする。