javascript設計パターン紹介(七)安定構造関数モード


ダグラス・クロークフォードは、JavaScriptにおける妥当なオブジェクトという概念を発明した.妥当な対象とは、公的な属性がなく、その方法もthisの対象を引用しないことをいう.安定したオブジェクトは、いくつかの安全な環境(これらの環境ではthisとnewの使用が禁止されます)や、他のアプリケーションによってデータが変更されるのを防ぐために使用されます.安定構造関数は寄生構造関数と似たパターンに従うが、2つの違いがある.
一つは、オブジェクトを新規作成する方法の例です.
第二に、newオペレータを使用しないで、コンストラクタを呼び出します.
コンストラクタの要求によって、前のPersonコンストラクタを次のように書き直すことができます.
function Person(name, age, job){ 
 	//         
 	var o = new Object(); 
 	//               
	
 	//     
 	o.sayName = function(){ 
 		alert(name); 
 	};
 	//     
 	return o; 
} 
なお、このようなモードで作成されたオブジェクトには、sayName()法を用いる以外に、nameの値にアクセスする方法がない.下のように安定したPersonコンストラクターを使用することができます.
var friend = Person("Nicholas", 29, "Software Engineer"); 
friend.sayName(); //"Nicholas" 
このように変数friendに保存されているのは、sayName()メソッドを呼び出す以外に、そのデータメンバーにアクセスできる方法がない.他のコードがあっても、このオブジェクトに方法またはデータのメンバーを追加しますが、構造関数に入ってきた元のデータにアクセスする他の方法はありません.コンストラクタモードが提供するこのセキュリティは、いくつかのセキュリティ実行環境に非常に適しているようにします.
寄生構造関数モードと同様に、安定構造関数モードを使って作成されたオブジェクトとコンストラクタの間にも関係がないので、instance ofオペレータはこのようなオブジェクトにも意味がない.