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

код здесь - 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

 Смежные вопросы

  • Нет связанных вопросов^_^