оригинал: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, читатели могут комментировать и обмениваться мнениями~
Ссылаться на: