コンストラクタ呼び出しパターン

JavaScriptTheGoodPartsより


  • new演算子をつけて呼び出された関数(コンストラクタ関数)は、新しいオブジェクトが生成される。

  • コンストラクタ関数はnew演算子指定なしでも呼び出せてしまう。実行時に何も言われないので、使用に注意する必要がある。

  • コンストラクタ関数は大文字から始まる名称にするなどの命名規則を設けるなどする。

  • クロージャを利用したインスタンス生成関数を作成などのnew演算子を使用しない方法もある。

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<script type="text/javascript">

//コンストラクタ関数呼び出し
var Foo = function(msg){
	this.msg = msg;
};
//Foo関数のprototypeオブジェクトにgetMessage関数を設定
//すべてのインスタンスでgetMessageが呼び出せるようになる。
Foo.prototype.getMessage = function(){
	return this.msg;
};

//クロージャを利用したクラス定義
//createHogeのスコープを外れても、thatは_fooと_barにアクセス可能。この仕組みをクロージャという。
var createHoge = function(f, b){
	var _foo = f;
	var _bar = b;
 	var that = {
		margeFooBar : function(){
			return _foo + _bar;
		}
	};
	return that;
};

function pageLoad(){
	var foo = new Foo("Fooクラス");
	window.alert(foo.getMessage());
	var hoge = createHoge(10, 20);
	window.alert(hoge.margeFooBar());
}
</script>
<body onload="pageLoad();">
</body>
</html>