Javascript模拟真实的私有变量,用getter/setter管理
Javascript simulate real private variable and manage it with getter/setter
我这样模拟私有变量是否正确?
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 我可以管理该私有变量。它的值可以是 get/set 使用自定义方法。
比方说这个例子
var c = new C(5);
console.log(c.privateProp); // 6
c.privateProp = 2;
console.log(c.privateProp); // 4
没有正确的方法来模拟私有变量,因为它们不是Javascript规范的一部分。
但是,仍然有很多方法可以模拟它们:
有 getter 和 setter
这与您的答案相同,但语法略有不同:
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,但通过在名称开头使用下划线将其标记为私有
我这样模拟私有变量是否正确?
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 我可以管理该私有变量。它的值可以是 get/set 使用自定义方法。
比方说这个例子
var c = new C(5);
console.log(c.privateProp); // 6
c.privateProp = 2;
console.log(c.privateProp); // 4
没有正确的方法来模拟私有变量,因为它们不是Javascript规范的一部分。
但是,仍然有很多方法可以模拟它们:
有 getter 和 setter
这与您的答案相同,但语法略有不同:
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,但通过在名称开头使用下划线将其标记为私有