Question

J'essaie d'implémenter le modèle de module révélateur mais je ne parviens pas à exposer une propriété privée modifiée.

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".
Était-ce utile?

La solution

return {
    fullName: name,
    set: setName
};

Cela utilise le valeurs de name et setName.Cela ne crée pas de référence à la variable.Effectivement, name est copié.

Vous devez créer un correspondant getName méthode, pour profiter des fermetures afin de pouvoir conserver une référence à une variable.

Autres conseils

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/

Si votre valeur est un attribut d'un objet ou d'une matrice, vous pouvez exporter l'objet ou la matrice et l'exportation sera en référence afin que les utilisateurs extérieurs auront des modifications mises à jour.C'est un peu risqué car le modèle générique des variables exportatrices a la dichotomie de copier / de référence scalaire / objet.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top