如何在javascript类中模拟保护变量?

How to simulate protected variables in javascript classes?

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.
    }
}

由于javascript还不支持保护变量,

在扩展 类 中从 super类 访问私有变量的最佳选择是什么?

我找不到很多这方面的文档,所以任何建议都会很有帮助。

使用 TypeScript 怎么样? TypeScript 类 支持 protected 关键字 (see docs),并且比 vanilla JavaScript.

有很多额外的好处

+++ 迟到的答案,但我们开始了...... +++

基于 WeakMap 的方法很可能涵盖了 OP 正在寻找的内容...

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; }