0

プライベート変数 _a がセッターで更新されない理由を誰かが説明できますか? 私は本当に明白なものを見逃しているに違いありませんが、それを見ることはできません。

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を返すはずだと思った

ここにコード - http://jsfiddle.net/JUKWN/

4

2 に答える 2

3

2 番目の呼び出しが機能するには、次のものが必要です。

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

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

コードは_a、実際のソースから動的に値を取得するのではなく、返されるデータ構造に値の静的表現を入れています。すべてのデータ型の値を動的に取得するには、ゲッター関数が必要です。_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 に答える