シングルトンパターン(アクセス権付きで)オブジェクトを定義する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/ |
|