Раскрыть приватные переменные в раскрытии шаблона модуля - PullRequest
11 голосов
/ 12 марта 2012

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

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".

Ответы [ 3 ]

21 голосов
/ 12 марта 2012
return {
    fullName: name,
    set: setName
};

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

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

13 голосов
/ 12 марта 2012
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/

0 голосов
/ 15 ноября 2015

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

...