update classes
This commit is contained in:
51
docs/javascript/06-classes/01-class-base.md
Normal file
51
docs/javascript/06-classes/01-class-base.md
Normal file
@@ -0,0 +1,51 @@
|
||||
---
|
||||
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` перед запуском конструктора, это именно свойство объекта.
|
||||
Reference in New Issue
Block a user