コードのまとめ方いろいろ。オブジェクト・クラス・クロージャ

種類コード例
Object literal
var myObject = {
  publicVar:1,
  publicFunc: function(){
    return 2;
  }
};

window.alert(myObject.publicVar);
//=> 1
window.alert(myObject.publicFunc());
//=> 2
Class
function MyClass(){
  this.publicFunc = function() {
    return 3;
  };
  this.publicVar2 = 2;
}
MyClass.prototype = {
  publicVar1: 1
};
var myObject = new MyClass();

window.alert(myObject.publicVar1);
//=> 1
window.alert(myObject.publicVar2);
//=> 2
window.alert(myObject.publicFunc());
//=> 2
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);
//=> undefined
window.alert(myObject.getVal());
//=> data in closure
window.alert(myObject.publicVal);
//=> public data in myObject
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);
//=> undefined
window.alert(myObject.getVal());
//=> data in closure
window.alert(myObject.publicVal);
//=> public data in MyClass's prototype
まとめ: Closureを使うとprivateメンバをつくれる。 自分の周りだと、Object literal > Class > Closure + Object/Classの順でよくみる。Closureは使ったことないけど、大量のjsを書くときは使うといいかも。モジュールの利用者が直接触る必要のないメンバがpublicになっていると混乱するんですよね。