Как в javascript вызвать приватный метод класса, используя его имя из строки

class Bar {
    static publicMethod() {
        let string = 'baz';
        Bar[methodName](); //это работает, всё ок

        string = 'foo';
        // а как тут вызвать Bar.#foo() ?
    }
    static baz() {
        ////
    }
    static #foo() {
        ////
    }
}

Ответы (1 шт):

Автор решения: MoloF

Не совсем понятно что вы хотите получить в итоге.

Если вы работаете внутри статичного метода, то вы можете вызывать через внутренний контекст другие статичные методы в том числе и приватные.

Когда вы используете запись вида Bar["#foo"](), то вам выдаст ошибку о невозможности получить доступ к приватному методу или переменной.

Используйте вызов статичных методов или функций которые не являются приватными по названию класса:

// WORK
Bar.publicMethod();
Bar.baz()

// DON'T WORK
Bar.#foo();

Используйте вызов статичных приватных методов функций или переменных внутри класса для соблюдения созданных правил.

static publicMethod() {
  // Work
  this.baz();
  this.#foo();
  Bar.baz();

  // Don't work
  Bar.#foo();
}

Рабочий пример:

class Bar {
  static publicMethod() {
    // Work
    this.baz();
    this.#foo();
  }
  static baz() {
    console.log("baz");
  }
  static #foo() {
    console.log("foo");
  }
}

Bar.publicMethod(); // Work

Bar.baz(); // console.log("baz")
// Bar.#foo(); // Uncaught SyntaxError: Private field '#foo' must be declared in an enclosing class

→ Ссылка