0

有人可以解释为什么私有变量 _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

代码在这里 - http://jsfiddle.net/JUKWN/

4

2 回答 2

3

对于第二次工作,您需要以下内容:

var f = function(a){
   var _a = a;

   return {
       getA : function() {
           return(_a);
       },
       setA : function(e){
          _a = e;
       }
   }        
}; 

您的代码将值的静态表示_a放入它返回的数据结构中,而不是从实际源动态获取它的值。您需要一个 getter 函数才能动态获取所有数据类型的值。如果 _a 中有一个数组或对象(因为它们总是通过引用),那么您所拥有的实际上会起作用,但当它是像数字或字符串这样的简单类型时(不是通过引用),则不会。

我建议的代码适用于_a.

于 2012-03-05T00:28:42.347 回答
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

JSFiddle

于 2012-03-05T00:29:34.900 回答