JavaScript 外部に対するデータのカプセル化
出典: フリー教科書『ウィキブックス(Wikibooks)』
[編集] 高階関数とガーベージコレクション
厳密に言うと、C++やJavaなどで経験した様な、「プライベートな変数」というのは、JavaScriptでは存在しない。 JavaScriptでは、クラス内部の変数(プロパティ)は、すべてパブリック(公開)な状態で存在しており、自由に書き換えが出来る。 しかし、JavaScriptでも安全な変数が存在しないわけではない。JavaScriptでカプセル化を行う場合は、高階関数を利用する。
// 「関数もオブジェクト」なので、このようにすれば良い
function publicFunction(){
var value1; // この様に、関数内部で宣言した変数が、プライベートなプロパティと同じ意味を持つ。
function privateFunction(){
value = ... // このようにプライベートな関数内部で上位の関数で宣言されている変数を操作する。
}
}
このように、高階関数の仕組みを利用して、安全に変数を利用することでカバー出来る。 JavaScriptの場合、arguments変数を利用すれば、一つの関数でポリモフィズムが利用できてしまうので、これと高階関数を利用したカプセル化が「JavaScript的なオブジェクト指向プログラミング」の作法となる。