Core > プライベート変数

by s_hiroshi

JavaScript

// var xにアクセスできない
var Foo = function(value) {
    var x = 'Private ' + value;
    this.y = 'Public ' + value;
};
Foo.prototype.getValue = function() {
    
    // return x;  x is not defined
    return this.y;
};
var f1 = new Foo('f1');
console.log(f1.getValue()); // Public f1


// var xにアクセスできるが値は全てのインスタンスで共有
// Bar.prototype.getValueがクロージャーになる
var Bar = function(value) {
    var x = 'Private ' + value;
    this.y = 'Public ' + value;
    // プロトタイプメソッド
    Bar.prototype.getValue = function() {
        return x + ' / ' + this.y;
    }
}
var b1 = new Bar('b1');
console.log(b1.getValue()); // Private b1 / Public b1
var b2 = new Bar('b2');
console.log(b2.getValue()); // Private b2 / Public b2

console.log(b1.getValue()); // Private b2 / Public b1 ※Privateはb2


// getValueをインスタンスメソッドして各インスタンスごとに値を保持
var Hoge = function(value) {
    var x = 'Private ' + value;
    this.y = 'Public ' + value;
    // インスタンスメソッド
    this.getValue = function() {
        return x + ' / ' + this.y;
    }
}
var h1 = new Hoge('h1');
console.log(h1.getValue()); // Private h1 / Public h1
var h2 = new Hoge('h2');
console.log(h2.getValue()); // Private h2 / Public h2

console.log(h1.getValue()); // Private h1 / Public h1 ※Privateはh1