34 lines
1.7 KiB
Markdown
34 lines
1.7 KiB
Markdown
---
|
||
sidebar_position: 4
|
||
---
|
||
|
||
# Конструктор, оператор "new"
|
||
|
||
### Функция-конструктор
|
||
Функции-конструкторы технически являются обычными функциями. Но есть два соглашения:
|
||
|
||
1. Имя функции-конструктора должно начинаться с большой буквы.
|
||
2. Функция-конструктор должна выполняться только с помощью оператора "new".
|
||
|
||
|
||
Когда функция вызывается как new User(...), происходит следующее:
|
||
|
||
1. Создаётся новый пустой объект, и он присваивается `this`.
|
||
2. Выполняется тело функции. Обычно оно модифицирует `this`, добавляя туда новые свойства.
|
||
3. Возвращается значение `this`.
|
||
|
||
Другими словами, new User(...) делает что-то вроде:
|
||
```js
|
||
function User(name) {
|
||
// this = {}; (неявно)
|
||
|
||
// добавляет свойства к this
|
||
this.name = name;
|
||
this.isAdmin = false;
|
||
|
||
// return this; (неявно)
|
||
}
|
||
```
|
||
Итого:
|
||
- Функции-конструкторы или просто конструкторы, являются обычными функциями, но существует общепринятое соглашение именовать их с заглавной буквы.
|
||
- Функции-конструкторы следует вызывать только с помощью `new`. Такой вызов подразумевает создание пустого `this` в начале и возврат заполненного в конце. |