Everyday Pieces ::
  • Webサービス
  • ブログパーツ
  1. ホーム
  2. プログラミング

JavaScriptのクラスの書き方の考察

2013年9月16日 2013年5月4日 プログラミング

前回の続きです。
今回はさらに考察を進めてみました。

JavaScriptの「クラス」の書き方は大きく分けて、
prototypeなスタイル、

var A = function( param ) {
	this.param = param;
	this.property = 'something';
};
A.prototype.method = function() {
	doSomething( this.param );
};

closureなスタイル

var B = function( param ) {
	this.property = 'something';
	this.method = function() {
		doSomething( param );
	};
};

の2つになりそうです。
それぞれの長所と短所を考えてみます。

prototypeなスタイルでは、
どんなプロパティやメソッドがあるのかが
closureなスタイルに比べて見やすい傾向。

prototypeなスタイルでは、
メソッドの定義は一度だけだが、
closureなスタイルではインスタンスをnewする度に
定義することになる。

closureなスタイルでは、
ソースがコンパクトになる。
タイピング量も少ない傾向。

closureなスタイルでは、
privateな変数や関数が設定しやすいので、
カプセル化という観点では有利。

prototypeなスタイルでは
後でメソッドを追加した場合は、
既に生成した全てのインスタンスが影響受けるが
(追加メソッドが利用可能となる)
closureなスタイルでは、
以降に生成されるインスタンスだけに影響する。
当然こうなるわけですが、
プログラム組む上で大きな違いとなりますね。

そんな感じで一長一短なので、
書き方をどちらかに統一するとしたら
なかなか悩ましい。
ハイブリッドな感じもアリかも。

個人的にはclosureスタイルが好みなのですが、
newする度にメソッドが定義されるのは、
そのぶん余計にメモリとかCPU時間とかを
喰いそうなのが気になりますね。
検証したわけではないのですが・・・。

公開されているライブラリとか参照してみると、
prototypeスタイルが大勢な感じがします。

突き詰めると、publicなものは
書き換えることが出来てしまうJavaScriptでは、
privateな変数や関数を使って
カプセル化して行儀良い感じに作っても、
汚染できるものは汚染できてしまうわけです。
結局のところ、
規則を決めて運用することになってしまいそうですね。

ということで個人的な結論。
基本はprototypeなスタイルで書くが、
ケースバイケースでclosureなスタイルも検討する。
一個くらいしかインスタンスを生成しないようなクラスなら
closureスタイルで構わないかも。

関連記事
JavaScriptのクラスの書き方と継承

コメントする キャンセル

アドレスが公開されることはありません。が付いている欄は必須項目です。

投稿ナビゲーション

無料な音声合成ソフト
three.jsで遊んでみる(17)

カテゴリー

WordPress つぶやき トピック プログラミング

タグ

AS3 enchant.js FamilyTreeVis Flash Geolocation gif.js kinect Linux MMD MoneyTrackNote notifier.js OpenCV PDFカレンダー RISC-V three.js セキュリティ テーマ自作 ブログパーツ 動物 動画 麻雀

アーカイブ

© Everyday Pieces ::