53 lines
2.7 KiB
Markdown
53 lines
2.7 KiB
Markdown
---
|
||
sidebar_position: 1
|
||
---
|
||
|
||
# Класс: базовый синтаксис
|
||
MyClass технически является функцией (той, которую мы определяем как constructor), в то время как методы, геттеры и сеттеры записываются в MyClass.prototype.
|
||
|
||
## Синтаксис «class»
|
||
```js
|
||
class MyClass {
|
||
// методы класса
|
||
constructor() { ... }
|
||
method1() { ... }
|
||
method2() { ... }
|
||
method3() { ... }
|
||
...
|
||
}
|
||
```
|
||
Затем используйте вызов `new MyClass()` для создания нового объекта со всеми перечисленными методами.
|
||
|
||
При этом автоматически вызывается метод `constructor()`, в нём мы можем инициализировать объект.
|
||
|
||
💥 **Методы в классе не разделяются запятой**
|
||
|
||
## Что такое класс?
|
||
В JavaScript класс – это разновидность функции.
|
||
|
||
Вот что на самом деле делает конструкция `class User {...}`:
|
||
|
||
1. Создаёт функцию с именем `User`, которая становится результатом объявления класса. Код функции берётся из метода `constructor` (она будет пустой, если такого метода нет).
|
||
2. Сохраняет все методы, такие как `sayHi`, в `User.prototype`.
|
||
|
||
При вызове метода объекта `new User` он будет взят из прототипа, как описано в главе `F.prototype`. Таким образом, объекты new User имеют доступ к методам класса.
|
||
|
||
## Геттеры/сеттеры, другие сокращения
|
||
Как и в литеральных объектах, в классах можно объявлять вычисляемые свойства, геттеры/сеттеры и т.д.
|
||
При объявлении класса геттеры/сеттеры создаются на `User.prototype`
|
||
|
||
## Свойства классов
|
||
В приведённом выше примере у класса `User` были только методы.
|
||
```js
|
||
class User {
|
||
name = "Аноним";
|
||
|
||
sayHi() {
|
||
alert(`Привет, ${this.name}!`);
|
||
}
|
||
}
|
||
new User().sayHi();
|
||
```
|
||
Свойство name не устанавливается в `User.prototype`. Вместо этого оно создаётся оператором `new` перед запуском конструктора, это именно свойство объекта.
|
||
|
||
🚀 **Источник: [https://learn.javascript.ru/class](https://learn.javascript.ru/class)** |