What is the difference between using a Weak Map vs an Object with a closure to simulate private properties for a class?
Trying to wrap my head around this. Google Apps Script does not yet support private properties in a class, as alternative many posts suggest the use of Weak Map and a closure to approximate this behavior. Like this:
const myPrivate1 = (() => {
const _private = new WeakMap();
class myPrivate1{
constructor({key, value}={}) {
let obj = {};
obj[key] = value;
_private.set(this, obj);
}
getPrivate(key) {
return _private.get(this)[key]
}
setPrivate({key, value}) {
let priv_attrs = _private.get(this)
priv_attrs[key] = value;
_private.set(this, priv_attrs);
}
}
return myPrivate1
})()
I've found that using an Object instead of the Weak Map behaves similarly. Like this:
const myPrivate2 = (() => {
const _private = new Object();
class myPrivate2{
constructor({key, value}={}) {
_private[key] = value;
}
getPrivate(key) {
return _private[key]
}
setPrivate({key, value}) {
_private[key] = value;
}
}
return myPrivate2
})()
to test this:
const testPrivate = () => {
const testObj1 = new myPrivate1({key: 'id', value: 'xyz123'});
const testObj2 = new myPrivate2({key: 'id', value: 'xyz123'});
testObj1.setPrivate({key: 'name', value: 'Larry'});
testObj2.setPrivate({key: 'name', value: 'Larry'})
console.log(testObj1.getPrivate('name'));
console.log(testObj2.getPrivate('name'));
testObj1.setPrivate({key: 'id', value: 'abc987'});
console.log(testObj1.getPrivate('id'));
console.log(testObj2.getPrivate('id'));
console.log(testObj1._private);
console.log(testObj2._private);
}
Output:
2:40:50 PM Info Larry 2:40:50 PM Info Larry 2:40:50 PM Info abc987 2:40:50 PM Info xyz123 2:40:50 PM Info undefined 2:40:50 PM Info undefined
Can some explain the advantages of using a Weak Map vs Object?
Via Active questions tagged javascript - Stack Overflow https://ift.tt/BNalQG7
Comments
Post a Comment