カプセル化 : JavaScript

Pocket

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.

コメントの投稿

改行と段落タグは自動で挿入されます。
メールアドレスは表示されません。