JavaScriptのオブジェクト指向プログラミング
カプセル化
privateなメソッドの中でthisできないの知らなくてちょっとはまった…。call, applyで呼べるっちゃ呼べるけどどうなんだろ…。
privateメソッドっていうよりクロージャって呼んだ方がよくね?
>|javascript|
// コンストラクタ
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
||<
履歴
タグ
他の人の「JavaScriptのオブジェクト指向プログラミング」
- kaniの「JavaScriptのオブジェクト指向プログラミング」カラカニのメモ帳Ajaxなページを作るときに、めんどくさがって手続き型でJavaScriptを組んでいると、いつもオブジェクト指向で組んでおけばよかったと後悔する。 クロージャ…2009-03-19