JavaScriptは明示的なアクセス権の設定はできない。クロージャーでカプセル化を行うことができる。
// 外側の関数の引数は自由変数になりクロージャーから参照できる例。
function foo(value) {
return function() {
value = value * 2;
return value;
};
}
var c = foo(2);
console.log(c()); // 4
console.log(c()); // 8
console.log(c()); // 16
// クロージャーを使い外部から変更できない変数(外側の引数value)を設定
function bar(value) {
return function() {
return value;
};
}
var d = bar(5);
d(); // 5
// 関数に新たなプロパティvalueを設定。
// クロージャーが参照するbar関数のvalueは変更されない。
d.value = 50;
console.log(d()); // 5のまま
// 外部からカプセル化した変数を操作するときは外部に操作用関数(特権メソッド)を提供する
// _getはクロージャーになっておりvalueにアクセスできる
function baz(value) {
function get() {
return value;
}
var o = {
getValue: get
};
return o;
}
var obj = baz(10);
console.log(obj.getValue()); // 100
obj.value = 1000; // 外部からはbarの引数valueを直接操作できない。
console.log(obj.getValue()); // 100 特権メソッド_getで参照。
No comments yet.
改行と段落タグは自動で挿入されます。
メールアドレスは表示されません。