JavaScriptのオブジェクト指向プログラミングの履歴
カプセル化
privateなメンバー、メソッドでthisできないの知らなくてちょっとはまった…。call, applyで呼べるっちゃ呼べるけどどうなんだろ…。
privateメソッドっていうよりクロージャって呼んだ方がよくね?
// コンストラクタ var Human = function(name, called){ // private member // - このスコープでのみアクセス可能 var happy = false; // public member // - いつでもアクセス可能 this.name = name; // private method // - 単なるクロージャ // - 普通に呼び出すとグローバルコンテキストで実行される。 // callしない限りこのオブジェクトでのthisが使えない // - private memberのみアクセスできる var format = function(){ return name + ', "' + called + '"'; } // privileged method // - privateにもpublicにもアクセスできる this.makeHappy = function(){ happy = true; }; this.isHappy = function(){ return happy; } this.toString = function(){ return format(); } }; // public method // - privilegedにアクセスできる // - privileged が定義されていればそちらが優先させる Human.prototype.faith = function(num){ this.makeHappy(); }; var akkun = new Human('akkun', 'the sleeping drummer'); console.log(akkun.name); console.log(akkun.toString()); console.log(akkun.isHappy()); akkun.faith(); console.log(akkun.isHappy()); console.log(akkun.format); // akkun // akkun, "the sleeping drummer" // false // true // undefined