Une fois que le soutien aux WeakMap est plus largement disponible, il existe une technique intéressante, détaillée dans l'exemple n°3. aquí .
Il autorise les données privées ET évite les coûts de performance de l'exemple de Jason Evans en permettant aux données d'être accessibles à partir de méthodes prototypes au lieu de méthodes d'instance uniquement.
La page MDN WeakMap mentionne que les navigateurs pris en charge sont Chrome 36, Firefox 6.0, IE 11, Opera 23 et Safari 7.1.
let _counter = new WeakMap();
let _action = new WeakMap();
class Countdown {
constructor(counter, action) {
_counter.set(this, counter);
_action.set(this, action);
}
decrement() {
let counter = _counter.get(this);
if (counter < 1) return;
counter--;
_counter.set(this, counter);
if (counter === 0) {
_action.get(this)();
}
}
}