メンバ変数のカプセル化

var User = function(name) {
  this.name = name;
}
User.prototype.getName = function() {
  return this.name;
}

よくありがちなオブジェクト指向javascriptです。setterを作って無いのは、値の書き換えを禁止したいからなんですが、

var u = new User('taro');
u.name = 'hoge';

こうやって、すぐ書き換えられてしまいます。全然カプセル化ができて無い。
しかししかし、昨日勉強したクロージャを使えばカプセル化が可能です。

var User = function(name) {
  this.getName = function() {
    return name;
  }
}