Раскройте частные переменные в шаблоне раскрытия модуля

StackOverflow https://stackoverflow.com//questions/9672084

Вопрос

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

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".
Это было полезно?

Решение

return {
    fullName: name,
    set: setName
};

Для этого используется ценности из name и setName.Он не создает ссылку на переменную.Эффективно, name копируется.

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

Другие советы

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/

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top