var pagger = new function () {
var _a = 1;
var _b = 2;
function add() {
return _a + _b;
}
return {
A: _a,
B: _b,
Add: add
};
};
//return 1
alert(pagger.A);
pagger.A=2;
pagger.B=2;
//return 2
alert(pagger.A);
//return 3
alert(pagger.Add());
如果我使用这种方式创建对象A和B是私有_a和_b的访问者,但如果我尝试通过A更改属性_a,则函数Add不要将其记入帐户。有没有办法使这项工作?
答案 0 :(得分:1)
您需要使用getter和setter:
return {
getA: function(){ return _a },
setA: function(x){ _a = x },
//...
}
实际上,.A
字段不像其他OO语言那样是私有变量的继承者。它只是一个哈希表字段,最初指向当前存储的_a
。如果您之后改变_a
或.A
,则不会干扰另一个。
更简单的替代方法是将这些字段公开,而不是包含一些内部变量:
function make_pager(){
return {
A : 1,
B : 2,
Add: function(){
//use the dynamically scoped "this" instead
//of lexical variables
return this.A + this.B
}
}
}
var pager = make_pager();
pager.A = 10;
console.log(pager.Add());