Несколько методов реализации приватных свойств в ES6 Class

JavaScript

оригинал:GitHub

частная собственность

Частные свойства — это объектно-ориентированное программирование (OOP) — это очень распространенная функция, которая обычно соответствует следующим характеристикам:

  • возможноclassДоступ разными методами внутри, но не снаружи класса;
  • Подклассы не могут наследовать частные свойства суперклассов.

Запасное колесо Класс

Четыре года назад, в июне 2015 года, в качестве стандарта был выпущен ES6. В ознаменование этого исторического момента этот стандарт также называлсяES2015, слишком далеко,JavaScriptсерединаclassВперед от запаски. перед этим,classЭто всегда было ключевым словом JS, и оно скрыто от неба.classСчитается синтаксическим сахаром для JS, он обеспечиваетJavaScriptПриносит способность описывать сущность с объектно-ориентированным мышлением. Но этого, кажется, недостаточно,classВозможности далеко не соответствуют ожиданиям JS-разработчиков. Итак, большие ребята из TC39 также усердно работали над тем, чтобы стать лучше, и выдвинули новое предложение:

class Foo {
  #a;  // 私有属性
  constructor(a, b) {
    this.#a = a;
    this.b = b
  }
}

Объявление вышеуказанных частных свойств должно быть скомпилировано компилятором, таким как Babel, прежде чем его можно будет использовать в обычном режиме.

Предложение достигло этапа 3, и его можно ожидать в будущем!

Однако многие JSers не могут ждать...

Борьба JSer

Благодаря определенной инкапсуляции данных разработчики JS встали на путь реализации «частных свойств» по ​​кривой.

1. Обычный

В мире JS есть неписаное правило добавлять знак подчеркивания перед переменной._"приставка, условность такова, что это частная собственность; но на самом деле это все же общественная собственность в новой одежде императора.

2. Закрытие

существуетconstructorЛокальная переменная определена в области видимости, и внутренняя загрузка предоставляет переменную через замыкание.

Таким образом, несмотря на то, что частное свойство недоступно снаружи, внутри класса, свойство не может быть общим для разных методов, и оно все же не является «частным свойством» в строгом смысле.

3. Symbols & Getters

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

Однако не без недостатков:
с помощьюgetOwnPropertySymbolsметод для получения объектаSymbolключевое значение.

4. WeakMap & Getters

WeakMapреализация иSymbolтакой же.

плечи гигантов

Вышеупомянутое является относительно возможным решением для JS для реализации частной собственности на данном этапе, и оно может редко использоваться на практике, но если вы столкнетесь с этой проблемой на собеседовании, возможно, эти решения можно будет сослаться.

Тогда среди всех этих программ рекомендуется выбратьTypeScriptизprivate.

Наконец, что касается реализации приватных свойств в JS, читатели могут комментировать и обмениваться мнениями~


Ссылаться на: