JavaScript > プライベート関数・変数を持つオブジェクトの定義
更新日
2012-07-21
広告
プライベート変数や、プライベート関数を持つオブジェクトを定義する方法を紹介します。
以下のようなパターンを使います。// 名前空間を用意 var SWENG = {}; SWENG.myApp = {}; // オブジェクトを返す関数を定義 SWENG.myApp.testObj = function () { // プライベート変数 var privateVar = 0; // プライベート関数 var privateMethod = function () { privateVar++; }; // return で、オブジェクトを返す return { publicVar: 5, // パブリック変数 publicMethod: function () { // パブリック関数 // プライベート変数や、プライベート関数にアクセス可能 privateMethod(); print('privateVar is ' + privateVar); // 当然、パブリック変数にアクセス可能 print('publicVar is ' + this.publicVar++); } }; }(); // パブリックメソッドの呼び出し SWENG.myApp.testObj.publicMethod(); // これで呼び出せる。 var obj1 = SWENG.myApp.testObj; // 1回、変数に代入して、呼び出してもよい。 obj1.publicMethod(); var obj2 = SWENG.myApp.testObj; // 再度、変数に代入してもよい。 obj2.publicMethod(); // プライベートメソッドの呼び出し (エラーになる) obj1.privateMethod();
testObj関数は、返り値としてオブジェクトを返します。ただし、オブジェクトを返す前に、そのオブジェクトからしかアクセスできないプライベート変数とプライベート関数を定義しています。
これを実行すると以下のようになります。
$ rhino sample.js privateVar is 1 publicVar is 5 privateVar is 2 publicVar is 6 privateVar is 3 publicVar is 7 js: uncaught JavaScript runtime exception: TypeError: Cannot find function privateMethod in object [object Object].
最期に、privateMethodを呼び出そうとして、エラーになっています。
また、privateVarやpublicVarの値の変化から、testObj関数で返されるオブジェクトは「唯一」であることがわかります。testObj関数を2回呼び出しても、毎回オブジェクトが生成されるわけではないということです。
広告
お問い合わせは sweng.tips@gmail.com まで。