編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS

シングルトンパターン(アクセス権付きで)

オブジェクトを定義する

var Singleton = (function(){
  var instance;

  function init() {
    var foo     = 'FOO';
    var bar    = 'BAR';
    var getFoo  = function () { return this.foo; };
    var getBar  = function () { return bar; };
    var _getBaz = function () { return 'BAZ' };
    return {
      foo:    foo,
      getFoo: getFoo,
      getBar: getBar,
      getBaz: _getBaz
    };
  }
  return {
    getInstance: function () {
      if (!instance) {
        instance = init();
      }
      return instance;
    }
  };
})();

オブジェクトを利用する

var obj = Singleton.getInstance();
console.log('DEBUG: ' + obj.getFoo());   // getFoo()は公開メソッド。
console.log('DEBUG: ' + obj.getBar());   // getBar()も公開メソッド。
obj.foo = 'FOO2';                        // fooはパブリックプロパティなので、
console.log('DEBUG: ' + obj.getFoo());   // "FOO2"に変わってる。
obj.bar = 'BAR2';                        // barはプライベートプロパティなので、
console.log('DEBUG: ' + obj.getBar());   // "BAR"のまま。
console.log('DEBUG: ' + obj.getBaz());   // getBaz()は内部でプライベートメソッド_getBaz()を呼んでいる。

var obj2 = Singleton.getInstance();      // シングルトンなので、
console.log('DEBUG: ' + obj2.getFoo());  // obj2のfooプロパティは"FOO2"になっている。
obj2.foo = "FOO3";                       // obj2のfooを変えると、
console.log('DEBUG: ' + obj.getFoo());   // objのfooは"FOO3"になっている。
DEBUG: FOO
DEBUG: BAR
DEBUG: FOO2
DEBUG: BAR
DEBUG: BAZ
DEBUG: FOO2
DEBUG: FOO3

参考

http://www.addyosmani.com/resources/essentialjsdesignpatterns/book/


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS

Last-modified: 2012-01-27 (金) 17:47:55 (1913d)