我是否以这种方式正确使用私有变量模拟?
var C = function(a) {
var _private = a + 1;
// more code...
Object.defineProperties(this, {
'privateProp': {
get: function() {
return _private;
},
set: function(b) {
_private = b + 2;
}
}
});
}
因此,使用getter / setter,我可以管理该私有变量。并且可以使用自定义方法获取/设置它的值。
让我们说这个例子
var c = new C(5);
console.log(c.privateProp); // 6
c.privateProp = 2;
console.log(c.privateProp); // 4
答案 0 :(得分:7)
没有正确的方式来模拟私有变量,因为它们不是Javascript规范的一部分。
但是,仍然有很多方法可以模拟它们:
这与您的回答相同,但语法略有不同:
function Rocket() {
var _fuel = 100;
return {
get fuel() {
return _fuel;
}
set fuel(value) {
_fuel = value;
}
};
}
此语法允许您以更自然的方式定义getter和setter函数,但是它们必须在对象文字中限制。
function Rocket() {
var fuel = 100;
return {
getFuel: function() { return fuel; },
setFuel: function(value) { fuel = value; }
};
}
这可以说是最优雅的方式,因为这是Javascript自从匿名函数添加到规范以来的工作方式。
function Rocket() {
this._fuel = 100;
this.getFuel = function() {
return this._fuel;
};
this.setFuel = function(value) {
this._fuel = value;
};
}
最后一种方法是将变量公开为public,但在名称的开头使用下划线将其标记为私有。