関数とカスタムオブジェクト
オブジェクト定義のパターン
// 内部で関数定義 var foo = function(x, y) { this.x = x; this.y = y; this.add = function () { return this.x + this.y; } } // 関数定義は外部 var foo = function(x, y) { this.x = x; this.y = y; this.add = addValues; } var addValues = function() { return this.x + this.y; } // プロトタイプを使用 var foo = function(x, y) { this.x = x; this.y = y; } foo.prototype.add = function() { return this.x + this.y; }
上二つはfooのインスタンスに限定されるけど、プロトタイプを使用した場合はnew foo()で作成出来る全てのインスタンスに拡張が適用される。という理解。内部で関数を定義した場合はクロージャなども使用できる+プライベートなメンバを定義できるけど、関数までふくめて全てがメモリ上に展開されるからメモリ食い。プロトタイプを使用した場合、プライベートは作れないけどメモリ効率は良い。ということらしい。
使い捨てのオブジェクト定義
var foo = { x: 0, y: 0, add: function() { this.x + this.y; } }
オブジェクトをこんな風にも定義できますよ。という話。とてもシンプルに記述できる
例外処理
オブジェクトからエラーを通知する場合、返値では無くて例外をthrowするとエラー処理を明確にすることが出来る。
ロギングなどの付加的な処理をまとめて記述できるので活用するべき。ただし、オブジェクトを使う側で確実にハンドリングすること。