Una delle più apprezzate novità della versione 6 di EcmaScript (la più recente versione di JavaScript supportata da tutti browser) è il pieno supporto della programmazione ad oggetti tramite la possibilità di definire vere e proprie classi.

Una feature che non ha ancora pieno supporto da parte di tutti i browser (mancano all’appello Safari e Samsung Internet) è però quella relativa a proprietà e metodi privati, a mio avviso indispensabili nell’ambito di una compiuta organizzazione della logica applicativa.

Ebbene, esiste un hack, tutt’altro che complesso, che consente di rendere operativa questa funzionalità su tutte le più recenti versioni dei browser.

Esempio:

<script>
class MyClass {

    constructor() {

        let privateProperty;
        let publicProperty;
       
        let privateMethod = function() {
	     // ...
        }
       
        let publicMethod = function() {
	     // ...
        }
     
        Object.assign(this, {publicProperty});
        Object.assign(this, {publicMethod});

    }

}

let c = new MyClass();

c.publicProperty = true; // OK
c.privateProperty = true; // ERRORE
c.publicMethod(); // OK 
c.privateMethod(); // ERRORE
</script>

L’espediente consiste nello spostare tutte le proprietà e i metodi della classe all’interno del costruttore, trasformandoli in variabili interne: nel caso dei metodi, questi diventano variabili definite da funzioni anonime (il modo di invocare tali metodi rimane però esattamente lo stesso).

Una volta fatto questo, occorre richiamare, sulle sole proprietà e metodi che si desidera rendere pubblici, il metodo Object.assign: questo “promuove” tali elementi rendendoli accessibili al di fuori del costruttore e di conseguenza nell’ambito di ogni istanza della classe.