Nathan Wall wrote:
     // ES6 Symbols

     // Forgive me for not knowing what the current
     // correct syntax is for creating a symbol:
     let timestamp = new Symbol();

     class SimpleDate {

         construct(time) {
             this.setTime(time);
         }

         setTime(time) {
             this[timestamp] = +time;
         }

         getTime() {
             return this[timestamp];
         }

     }


     // ES6 WeakMap

     let timeMap = new WeakMap(),
         // Store WeakMap methods to maintain integrity of the internal state.
         WeakMapGet = Function.prototype.call.bind(WeakMap.prototype.get),
         WeakMapSet = Function.prototype.call.bind(WeakMap.prototype.set);

     class SimpleDate {

         construct(time) {
         this.setTime(time);
         }

         setTime(time) {
             WeakMapSet(timeMap, this, +time);
         }

         getTime() {
             return WeakMapGet(timeMap, this);
         }

     }

AFAIK the two ES6 implementations above should function the same, except when 
(1) a Proxy uses a SimpleDate as the target and (2) a SimpleDate is frozen.

In the case of (1), the implementation using a private symbol will have 
internal accesses to the `timestamp` symbol exposed through the 
unknownPrivateSymbol trap.

In the case of (2), the implementation using a private symbol will fail on a 
call to `setTime` when the object is frozen (I think).

IIRC, private symbols are exempt from freezing.

Herby
_______________________________________________
es-discuss mailing list
es-discuss@mozilla.org
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to