Exponer variables privadas en el patrón de módulo revelador
-
12-12-2019 - |
Pregunta
Estoy tratando de implementar el patrón de módulo revelador, pero no puedo exponer una propiedad 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".
Solución
return {
fullName: name,
set: setName
};
que utiliza los valores de name
y setName
.No crea una referencia a la variable.Efectivamente, se copia name
.
Debe crear un método de generación de generación correspondiente, para aprovechar los cierres para que pueda mantener una referencia a una variable.
Otros consejos
var myRevealingModule = (function(){
var name = 'Diogo';
function setName () {
name = name + ' Cardoso';
};
function getName () {
return name;
};
return {
fullName: name,
set: setName,
get: getName
};
}());
Si su valor es un atributo en un objeto o matriz, puede exportar el objeto o la matriz y la exportación será por referencia, por lo que los usuarios externos verán cambios actualizados.Es un poco arriesgado, ya que el patrón genérico de las variables de exportación tiene la copia escalar / objeto de la dicotomía de referencia.