Expor variáveis privadas no Revealing Module Pattern
-
12-12-2019 - |
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".
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
};
}());
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