Pergunta

Estou tentando implementar o Revealing Module Pattern, mas não consigo expor uma propriedade privada modificada.

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".
Foi útil?

Solução

return {
    fullName: name,
    set: setName
};

Isso usa o valores de name e setName.Não cria uma referência à variável.Efetivamente, name é copiado.

Você precisa criar um correspondente getName método, para aproveitar os fechamentos para que você possa manter uma referência a uma variável.

Outras dicas

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/

Se o seu valor for um atributo em um objeto ou array, você poderá exportar o objeto ou array e a exportação será por referência para que usuários externos vejam as alterações atualizadas.É um pouco arriscado, pois o padrão genérico de exportação de variáveis ​​​​tem a dicotomia escalar/cópia de objeto/referência.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top