有人可以解释为什么私有变量_a没有使用setter更新?我必须遗漏一些非常明显但却看不到的东西。
var f = function(a){
var _a = a;
return {
getA : _a,
setA : function(e){
_a = e;
}
}
};
var d = f(1);
console.log(d.getA); // 1
d.setA(2);
console.log(d.getA); // 1
我认为第二个电话应该返回2
答案 0 :(得分:3)
对于第二次工作,你需要这个:
var f = function(a){
var _a = a;
return {
getA : function() {
return(_a);
},
setA : function(e){
_a = e;
}
}
};
您的代码将_a
的值静态表示到它返回的数据结构中,而不是从实际源中动态获取它的值。您需要一个getter函数才能动态获取所有数据类型的值。如果_a中有一个数组或对象(因为它们总是通过引用),那么你实际可以使用的是什么,但是当它是一个简单的类型,如数字或字符串(不是通过引用)时,你的实际工作。
我建议的代码适用于_a
的所有值。
答案 1 :(得分:1)
您没有真正的getter
功能。您只需将_a
的值分配给返回的对象文字的属性即可。像这样修改你的代码
return {
getA : function() {
return(_a);
},
setA : function(e){
_a = e;
}
};
var d = f(1);
console.log(d.getA()); // 1
d.setA(2);
console.log(d.getA()); // 2