2012-03-12 4 views
10

Sto tentando di implementare il Revealing Module Pattern ma non sono in grado di esporre una proprietà privata modificata.Esporre variabili private in Revealing Pattern Pattern

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

risposta

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

che utilizza il valori di name e setName. Non crea un riferimento alla variabile. In effetti, name viene copiato.

È necessario creare un metodo getName corrispondente, per sfruttare le chiusure in modo da poter mantenere un riferimento a una variabile.

13
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/

0

Se il valore è un attributo in un oggetto o in un array, è possibile esportare l'oggetto o l'array e l'esportazione verrà effettuata per riferimento, in modo che gli utenti non vedano le modifiche aggiornate. È un po 'rischioso dal momento che il modello generico di esportazione delle variabili ha la dicotomia scalare/oggetto copia/riferimento.