CoffeeScriptでクラス変数やクラスメソッドを使う

2011-01-26
2011-01-28
かなり古い記事です。現在も有効な内容であるかどうか分かりませんのでご注意ください。

やり方

定義の際に@を頭に付ける。

class Something
	someProp: "hoge"
	someMethod: ->
		...

	@someClassProp: "HOGEHOGE"
	@someClassMethod: ->
		...

どうやってやるんだろうと探したらドキュメントに追記っぽくちょろっと書いてあった。

object itself (the constructor function), you can assign static properties by using
@property: value, and call functions defined in parent classes: @attr 'title', type: 'text'

まあドキュメント自体がちょっと解説のついたチートシートみたいな具合なので、いろいろなことがちょろっと書いてある。

JavaScript的に見ると

@を付けて定義した変数やメソッドは関数オブジェクトのプロパティになる。
@を付けないで定義した変数やメソッドは関数オブジェクトのprototypeのプロパティになる。

単純なコードで書くと以下のような感じか。

Something = function(){};
Something.prototype.someProp = "hoge";
Something.prototype.someMethod = function() { ... }; 

Something.someClassProp = "HOGEHOGE";
Something.someClassMethod = function() { ... };

インスタンスメソッドからクラス変数は使えない。
別のオブジェクトにある変数だし、プロトタイプチェーンでもたどれないから。
(Samething.somePropのようにクラス変数としての呼び出しならもちろん使える。インスタンス変数と同じように呼び出そうとしたら使えないと言うこと)

クラスメソッドからインスタンス変数が使えないのも同じ理由。

2010/01/28追記

JavaScriptのコードをうっかり間違っていたので修正。

Profile

フルスタック気味のフリーランスプログラマー。

どちらかと言うと得意はインフラ構築とサーバーサイドプログラミングですが、フロントエンドもぼちぼちやっています。

最近の興味範囲はWordPress、AWS、サーバーレス、UIデザイン。

愛車はセロー。カメラはペンタックス。旅好きです。横浜在住。