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".
.

È stato utile?

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
    };

}());
.
.

http://jsfiddle.net/yexmx/

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top