種類 | コード例 |
Object literal
| var myObject = {
publicVar:1,
publicFunc: function(){
return 2;
}
};
window.alert(myObject.publicVar);
window.alert(myObject.publicFunc());
|
Class
| function MyClass(){
this.publicFunc = function() {
return 3;
};
this.publicVar2 = 2;
}
MyClass.prototype = {
publicVar1: 1
};
var myObject = new MyClass();
window.alert(myObject.publicVar1);
window.alert(myObject.publicVar2);
window.alert(myObject.publicFunc());
|
Closure + Object literal
| var myObject = (function(){
var privateVal = "data in closure";
return {
getVal: function() { return privateVal; },
publicVal: "public data in myObject"
};
})();
window.alert(myObject.privateVal);
window.alert(myObject.getVal());
window.alert(myObject.publicVal);
|
Closure + Class
| function MyClass(){
var privateVal = "data in closure";
this.getVal = function() { return privateVal; };
}
MyClass.prototype = {
publicVal: "public data in MyClass' prototype"
};
var myObject = new MyClass();
window.alert(myObject.privateVal);
window.alert(myObject.getVal());
window.alert(myObject.publicVal);
|
まとめ: Closureを使うとprivateメンバをつくれる。
自分の周りだと、Object literal > Class > Closure + Object/Classの順でよくみる。Closureは使ったことないけど、大量のjsを書くときは使うといいかも。モジュールの利用者が直
接触る必要のないメンバがpublicになっていると混乱するんですよね。