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.
改行と段落タグは自動で挿入されます。
メールアドレスは表示されません。