¿Cuál es la mejor manera de simular variables protegidas en javascript ?
class Parent{ #variable; // Private variable. This is not to be public. constructor(value) { this.#variable = value; } } class Child extends Parent{ getNewVariable() { return (1 + this.#variable); // Uncaught SyntaxError: Private field '#variable' must be declared in an enclosing class // We want #variable to be accessible without making it public. } }Dado que javascript aún no admite variables protegidas,
¿Cuál es la mejor opción para acceder a variables privadas de superclases en clases extendidas?
No he podido encontrar mucha documentación sobre esto, por lo que cualquier sugerencia sería muy útil.
¿Qué pasa con el uso de TypeScript? Las clases de TypeScript admiten la palabra clave protected ( consulte los documentos ) y tienen muchos beneficios adicionales sobre JavaScript estándar.
+++ respuesta tardía, pero aquí vamos... +++
Un enfoque basado en WeakMap probablemente cubra lo que el OP está buscando ...
const protectedStatesMap = new WeakMap; class Parent{ constructor(foo) { protectedStatesMap.set(this, { foo }); } getFoo() { return protectedStatesMap.get(this).foo; } } class Child extends Parent{ constructor(foo, bar) { super(foo); Object.assign(protectedStatesMap.get(this), { bar }) } getBar() { return protectedStatesMap.get(this).bar; } } const childA = new Child('foo', 'bar'); const childB = new Child('baz', 'biz'); console.log('childA.getFoo() ...', childA.getFoo()); console.log('childA.getBar() ...', childA.getBar()); console.log('childB.getFoo() ...', childB.getFoo()); console.log('childB.getBar() ...', childB.getBar()); .as-console-wrapper { min-height: 100%!important; top: 0; }