Esporre variabili private nel modello di moduli rivelatori
-
12-12-2019 - |
Domanda
Sto cercando di implementare il modello di moduli rivelatori ma non riesco a esporre una proprietà privata modificata.
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".
. Soluzione
return {
fullName: name,
set: setName
};
.
che utilizza i valori di name
e setName
.Non crea un riferimento alla variabile.Effettivamente, viene copiato name
.
È necessario creare un metodo getName
corrispondente, per sfruttare le chiusure in modo da poter mantenere un riferimento a una variabile.
Altri suggerimenti
var myRevealingModule = (function(){
var name = 'Diogo';
function setName () {
name = name + ' Cardoso';
};
function getName () {
return name;
};
return {
fullName: name,
set: setName,
get: getName
};
}());
.
.
Se il valore è un attributo in un oggetto o nell'array, è possibile esportare l'oggetto o l'array e l'esportazione sarà effettuata per riferimento, quindi gli utenti esterni vedranno modifiche aggiornate.È un po 'rischioso poiché il modello generico delle variabili esportazione ha la copia scalare / oggetto / dicotomia di riferimento.