update classes
This commit is contained in:
@@ -0,0 +1,46 @@
|
||||
---
|
||||
sidebar_position: 4
|
||||
---
|
||||
|
||||
# Приватные и защищённые методы и свойства
|
||||
В терминах ООП отделение внутреннего интерфейса от внешнего называется инкапсуляция.
|
||||
|
||||
Это даёт следующие выгоды:
|
||||
|
||||
**Защита для пользователей, чтобы они не выстрелили себе в ногу**
|
||||
|
||||
Если мы чётко отделим внутренний интерфейс, то разработчик класса сможет свободно менять его внутренние свойства и методы, даже не информируя пользователей…
|
||||
#### Поддерживаемость
|
||||
Если вы разработчик такого класса, то приятно знать, что приватные методы можно безопасно переименовывать, их параметры можно изменять и даже удалять, потому что от них не зависит никакой внешний код.
|
||||
|
||||
В новой версии вы можете полностью всё переписать, но пользователю будет легко обновиться, если внешний интерфейс остался такой же.
|
||||
|
||||
## Внутренний и внешний интерфейсы
|
||||
В объектно-ориентированном программировании свойства и методы разделены на 2 группы:
|
||||
|
||||
- Внутренний интерфейс – методы и свойства, доступные из других методов класса, но не снаружи класса.
|
||||
- Внешний интерфейс – методы и свойства, доступные снаружи класса.
|
||||
|
||||
Итак, всё, что нам нужно для использования объекта, это знать его внешний интерфейс. Мы можем совершенно не знать, как это работает внутри, и это здорово.
|
||||
|
||||
В JavaScript есть два типа полей (свойств и методов) объекта:
|
||||
- Публичные: доступны отовсюду. Они составляют внешний интерфейс. До этого момента мы использовали только публичные свойства и методы.
|
||||
- Приватные: доступны только внутри класса. Они для внутреннего интерфейса.
|
||||
|
||||
Защищённые поля не реализованы в JavaScript на уровне языка, но на практике они очень удобны, поэтому их эмулируют.
|
||||
|
||||
## Защищённое свойство «waterAmount»
|
||||
Защищённые свойства обычно начинаются с префикса `_`.
|
||||
|
||||
Это не синтаксис языка: есть хорошо известное соглашение между программистами, что такие свойства и методы не должны быть доступны извне. Большинство программистов следуют этому соглашению.
|
||||
|
||||
## Приватное свойство «#waterLimit»
|
||||
Есть новшество в языке JavaScript, которое почти добавлено в стандарт: оно добавляет поддержку приватных свойств и методов.
|
||||
|
||||
Приватные свойства и методы должны начинаться с #. Они доступны только внутри класса.
|
||||
|
||||
Например, в классе ниже есть приватное свойство #waterLimit и приватный метод #checkWater для проверки количества воды
|
||||
|
||||
На уровне языка # является специальным символом, который означает, что поле приватное. Мы не можем получить к нему доступ извне или из наследуемых классов.
|
||||
|
||||
Приватные поля не конфликтуют с публичными. У нас может быть два поля одновременно – приватное #waterAmount и публичное waterAmount.
|
||||
Reference in New Issue
Block a user