JavaScript 外部に対するデータのカプセル化

出典: フリー教科書『ウィキブックス(Wikibooks)』

[編集] 高階関数とガーベージコレクション

厳密に言うと、C++やJavaなどで経験した様な、「プライベートな変数」というのは、JavaScriptでは存在しない。 JavaScriptでは、クラス内部の変数(プロパティ)は、すべてパブリック(公開)な状態で存在しており、自由に書き換えが出来る。 しかし、JavaScriptでも安全な変数が存在しないわけではない。JavaScriptでカプセル化を行う場合は、高階関数を利用する。

// 「関数もオブジェクト」なので、このようにすれば良い
function publicFunction(){
	var value1; // この様に、関数内部で宣言した変数が、プライベートなプロパティと同じ意味を持つ。
	function privateFunction(){
		value = ...	// このようにプライベートな関数内部で上位の関数で宣言されている変数を操作する。
	}
}

このように、高階関数の仕組みを利用して、安全に変数を利用することでカバー出来る。 JavaScriptの場合、arguments変数を利用すれば、一つの関数でポリモフィズムが利用できてしまうので、これと高階関数を利用したカプセル化が「JavaScript的なオブジェクト指向プログラミング」の作法となる。

ヘルプ