Как получить доступ к приватному члену суперкласса в JavaScript? - PullRequest
1 голос
/ 26 апреля 2019

В class как мне получить доступ к закрытому полю его базового класса, скажем, #property?

class Base {
  #property = '1.618'
  toString() {
    return Base.name
  }
}
class X extends Base {
  thisWorks() {
    return super.toString()
  }
  toString() {
    return super.#property // SyntaxError: Unexpected private field
  }
}
console.log(`${new X}`)

Ответы [ 2 ]

3 голосов
/ 26 апреля 2019

В ООП вы не можете получить доступ к private методу или свойству вне класса, даже если вы расширяете. Но вы можете получить доступ к protected методу родительского класса в дочернем классе.

1 голос
/ 26 апреля 2019

Это невозможно :

Это означает, что закрытые поля являются чисто внутренними: никакой код JS вне класса не может обнаружить или повлиять на существование, имя или значение любого частного поля экземпляров указанного класса без прямой проверки источника класса, если только класс не выберет раскрыть их. ( Это включает подклассы и суперклассы.)

Base должен был бы преднамеренно раскрыть свой #property другим способом, например, с помощью метода.

...