class Base { static #foo = 1; static getThis() { return this.#foo; } static updateThis(val) { return (this.#foo = val); } static getClass() { return Base.#foo; } static updateClass(val) { return (Base.#foo = val); } } class Sub1 extends Base { static #foo = 2; static update(val) { return (this.#foo = val); } } class Sub2 extends Base {} expect(Base.getThis()).toBe(1); expect(Base.getClass()).toBe(1); expect(() => Sub1.getThis()).toThrow(); expect(Sub1.getClass()).toBe(1); expect(() => Sub2.getThis()).toThrow(); expect(Sub2.getClass()).toBe(1); expect(Sub1.update(3)).toBe(3); expect(Base.getThis()).toBe(1); expect(Base.getClass()).toBe(1); expect(() => Sub1.getThis()).toThrow(); expect(Sub1.getClass()).toBe(1); expect(() => Sub2.getThis()).toThrow(); expect(Sub2.getClass()).toBe(1); expect(Base.updateThis(4)).toBe(4); expect(Base.getThis()).toBe(4); expect(Base.getClass()).toBe(4); expect(() => Sub1.getThis()).toThrow(); expect(Sub1.getClass()).toBe(4); expect(() => Sub2.getThis()).toThrow(); expect(Sub2.getClass()).toBe(4); expect(Base.updateClass(5)).toBe(5); expect(Base.getThis()).toBe(5); expect(Base.getClass()).toBe(5); expect(() => Sub1.getThis()).toThrow(); expect(Sub1.getClass()).toBe(5); expect(() => Sub2.getThis()).toThrow(); expect(Sub2.getClass()).toBe(5); expect(() => Sub2.updateThis(6)).toThrow(); expect(Sub2.updateClass(7)).toBe(7); expect(Base.getThis()).toBe(7); expect(Base.getClass()).toBe(7); expect(() => Sub1.getThis()).toThrow(); expect(Sub1.getClass()).toBe(7); expect(() => Sub2.getThis()).toThrow(); expect(Sub2.getClass()).toBe(7);