Выводить частные переменные в раскрывающемся шаблоне модуля

Я пытаюсь реализовать шаблон раскрывающегося модуля, но я не могу открыть измененное частное свойство.

var myRevealingModule = (function(){

    var name = 'Diogo';

    function setName () {
       name = name + ' Cardoso';
    }

    return {
        fullName: name,
        set: setName
    };

}());

// Sample usage:
myRevealingModule.set();
console.log(myRevealingModule.fullName); // "Diogo" instead of the excepted "Diogo Cardoso".

Ответ 1

return {
    fullName: name,
    set: setName
};

Использует значения name и setName. Он не создает ссылку на переменную. Эффективно копируется name.

Вам нужно создать соответствующий метод getName, чтобы воспользоваться преимуществами закрытия, чтобы вы могли сохранить ссылку на переменную.

Ответ 2

var myRevealingModule = (function(){

    var name = 'Diogo';

    function setName () {
       name = name + ' Cardoso';
    };

    function getName () {
       return name;
    };

    return {
        fullName: name,
        set: setName,
        get: getName
    };

}());

http://jsfiddle.net/yeXMx/

Ответ 3

Если ваше значение является атрибутом в объекте или массиве, вы можете экспортировать объект или массив, а экспорт будет по ссылке, поэтому внешние пользователи будут видеть обновленные изменения. Это немного рискованно, так как общий шаблон экспортируемых переменных имеет скалярную/объектную копию/ссылочную дихотомию.