Search code examples
javascriptdesign-patternsrevealing-module-pattern

Expose private variables in Revealing Module Pattern


I'm trying to implement the Revealing Module Pattern but I'm unable to expose a modified private property.

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

Solution

  • return {
        fullName: name,
        set: setName
    };
    

    That uses the values of name and setName. It does not create a reference to the variable. Effectively, name is copied.

    You need to create a corresponding getName method, to take advantage of closures so that you can keep a reference to a variable.