2012-03-05 7 views
0

プライベート変数_aがセッターで更新されない理由を説明できますか?私は本当に明白なものを見逃しているに違いないが、それを見ることはできない。あなたのコードを入れているモジュールパターンでのプライベート変数の設定と取得

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

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

: -

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回目の呼び出しはここ2

コードを返すべきであると考えて仕事をする2回目の呼び出しのためにhttp://jsfiddle.net/JUKWN/

答えて

3

を、あなたはこれを必要とします_aという値の静的表現で、実際のソースから値を動的に取得するのではなく、戻ってくるデータ構造に反映されます。すべてのデータ型の値を動的に取得するには、ゲッター関数が必要です。 _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

のようにコードを変更します
関連する問題