2012-03-05 35 views
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/

回答

3

對於第二個呼叫工作,你需要這樣的:

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

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

你的代碼是把將_a的值靜態表示爲它返回的數據結構,而不是從實際源動態獲取它的值。您需要一個getter函數才能動態獲取所有數據類型的值。如果_a中有一個數組或對象(因爲它們總是通過引用),但是它不是一個簡單的類型(如數字或字符串)(不是通過引用),您實際上可以工作。

我建議的代碼適用於_a的所有值。

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