JavaScriptのオブジェクト指向プログラミングの履歴
カプセル化の仕方
privateなメンバー、メソッドでthisできないの知らなくてちょっとはまった…。call, applyで呼べるっちゃ呼べるけどどうなんだろ…。
var Human = function(name, called){ // privateメンバ // - このスコープでのみアクセス可能 var happy = false; // publicメンバ // - いつでもアクセス可能 this.name = name; // privateメソッド // - 単なるクロージャ // - 普通に呼び出すとグローバルコンテキストで実行される。 // callしない限りこのオブジェクトでのthisが使えない // - private memberのみアクセスできる var format = function(){ return name + ', "' + called + '"'; } // privilegedメソッド // - privateにもpublicにもアクセスできる this.makeHappy = function(){ happy = true; }; this.isHappy = function(){ return happy; } this.toString = function(){ return format(); } }; // publicメソッド // - 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