* クラスの作り方 - オブジェクトリテラルを使って [#f4b8ef24]
** クラスの作成 [#p55e2c0a]
var foo = function (v1, v2) {
var x = v1, y = v2;
var that = {};
that.getSum = function () {
return x + y;
}
return that;
};
foo()はコンストラクタであり、初期化処理後、オブジェクトリテラルを返す。
** クラスのインスタンスを作成・利用 [#v3e37dc3]
var f = foo(1,2);
f.getSum(); // => 3
** オブジェクトリテラルを使ったクラスのメリット [#f2092a89]
クラス内の変数・関数を隠蔽出来る。この例の場合、foo()中のxやyはプライベート変数になっている。
** 子クラスの作成 [#k186c407]
var bar = function (v1, v2) {
var n = 100;
var that = foo(v1,v2);
that.getSum2 = function () {
return that.getSum() + n;
}
return that;
}
thatを(空のオブジェクトリテラルではなく)foo()で初期化して、fooの継承を実現している。
** 子クラスのインスタンスを作成・利用 [#z5d89b00]
var b = bar(1,2);
b.getSum2(); // => 103
b.getSum(); // => 3
** モジュールパターン [#w63b187f]
モジュールパターンとはシングルトンパターンの一種で、オブジェクトのプロパティをパブリック・プライベートにする。Douglas Crockford氏によって提唱されたらしい。
var module = function() {
var v1 = null;
var v2 = 10;
function init(v) {
v1 = v;
};
function func() {
return _func();
};
function _func() {
return v1 * v2;
};
function value() {
return v1;
}
return {
init : init,
func : func,
value : value
};
}();
- 無名関数によって変数や関数を局所化する。
- オブジェクトリテラルを返すモジュールパターンによりグローバルからアクセス出来るようにする。
- オブジェクトリテラルから内部の変数や関数を参照するようにする事で、内部の変数や関数の書式を一貫したものにする。
** 参考 [#ra57d02f]
- JavaScript "Best Practices"
- http://www.slideshare.net/cheilmann/javascript-best-practices-1041724