26. JS с нуля, ваще с нуля (конструктор, new)

Оценить качество материала и подачу материала автором видео:

Front-end

Трудоустройтесь middle front-end разработчиком на React JS (TypeScript) за 12-16 месяцев обучения с ежедневной менторской поддержкой в формате видео 1 на 1 и коммерческими проектами в портфолио

Перейти на курс
Front-end

Back-end

Трудоустройтесь middle back-end разработчиком за 12-16 месяцев обучения с ежедневной менторской поддержкой в формате видео 1 на 1 и коммерческими проектами в портфолио

Перейти на курс
Back-end

Карьерный бустер

Получите коммерческий опыт на реальных стартапах, прокачайте tech & soft навыки, научитесь работать в команде, проходить собеседования и получите первую работу в IT!

Перейти на курс
Карьерный бустер

Основы Front-end

Сделайте первый шаг в IT, освоив базовые знания разработки и научившись создавать небольшие проекты на JavaScript

Перейти на курс
Основы Front-end

Основы Back-end

Сделайте первый шаг в IT, освоив базовые знания разработки. Без опыта. Без математики. Только практика: JavaScript, SQL, Node JS, база данных

Перейти на курс
Основы Back-end

Конструктор и ключевое слово new

Автор конспекта: Андрей Комаров
🔗

Полезные ссылки:

Что такое конструктор?

Конструктор — это обычная функция в JavaScript, которая предназначена для создания однотипных объектов (экземпляров).

Представьте, что вам нужно создать несколько собак с одинаковыми характеристиками. Вместо того чтобы каждый раз писать один и тот же код, можно создать «шаблон» — конструктор.

Основное назначение:

  • Создание множества похожих объектов
  • Избежание дублирования кода
  • Создание сложных объектов с методами и свойствами

Именование конструкторов

Конструкторы принято называть с большой буквы и использовать существительные:

javascript
// Правильно — с большой буквы, существительное
function Dog(name, age) {
  this.name = name
  this.age = age
}
 
// Неправильно — с маленькой буквы, глагол
function createDog(name, age) {
  // ...
}

Оператор new

Конструкторы всегда вызываются с оператором new:

javascript
// Создаем двух собак
const myDog = new Dog("Шарик", 3)
const yourDog = new Dog("Бобик", 5)

Что делает оператор new

  1. Создает новый пустой объект.
  2. Устанавливает this на этот новый объект.
  3. Выполняет код функции‑конструктора.
  4. Автоматически возвращает созданный объект.
javascript
function Dog(name, age) {
  // this = {} (неявно создается оператором new)
  this.name = name // добавляем свойство
  this.age = age // добавляем свойство
  // return this; (неявно возвращается оператором new)
}

Контекст this в конструкторах

При вызове с new:

javascript
function Dog(name) {
  this.name = name // this ссылается на новый объект
  this.voice = function () {
    return "Гав! Меня зовут " + this.name
  }
}
 
const myDog = new Dog("Шарик")
console.log(myDog.voice()) // "Гав! Меня зовут Шарик"
console.log(myDog) // {name: 'Шарик', voice: ƒ}

При вызове без new (НЕ ДЕЛАЙТЕ ТАК!):

javascript
const badDog = Dog("Шарик") // забыли new
console.log(badDog) // undefined — функция ничего не возвращает
console.log(window.name) // "Шарик" — свойство добавилось в window!

Добавление методов

Методы можно добавлять прямо в конструкторе:

javascript
function User(name, email) {
  this.name = name
  this.email = email
 
  this.getInfo = function () {
    return `Пользователь: ${this.name}, Email: ${this.email}`
  }
}
 
const user1 = new User("Иван", "ivan@mail.ru")
console.log(user1.getInfo()) // "Пользователь: Иван, Email: ivan@mail.ru"

Примечание: в реальных проектах методы лучше выносить в prototype, чтобы не дублировать функции на каждый экземпляр.

Сравнение с литералами объектов

Литералы объектов (просто и быстро):

javascript
// Для одноразовых объектов
const singleDog = {
  name: "Шарик",
  age: 3,
  voice: function () {
    return "Гав!"
  },
}

Конструкторы (для множества однотипных объектов):

javascript
// Когда нужно много одинаковых объектов
function Dog(name, age) {
  this.name = name
  this.age = age
  this.voice = function () {
    return "Гав! Меня зовут " + this.name
  }
}
 
// Создаем сколько угодно собак
const dog1 = new Dog("Шарик", 3)
const dog2 = new Dog("Бобик", 5)
const dog3 = new Dog("Рекс", 2)

Практический пример

javascript
// Конструктор для создания книг
function Book(title, author, year) {
  this.title = title
  this.author = author
  this.year = year
 
  this.getInfo = function () {
    return `${this.title} (${this.author}, ${this.year})`
  }
 
  this.getAge = function () {
    const currentYear = new Date().getFullYear()
    return currentYear - this.year
  }
}
 
// Создаем несколько книг
const book1 = new Book("Война и мир", "Л. Толстой", 1869)
const book2 = new Book("Преступление и наказание", "Ф. Достоевский", 1866)
 
console.log(book1.getInfo()) // "Война и мир (Л. Толстой, 1869)"
console.log(book2.getAge()) // Возраст книги в годах

Современный синтаксис (классы)

В новых версиях JavaScript используется синтаксис классов:

javascript
class Book {
  constructor(title, author, year) {
    this.title = title
    this.author = author
    this.year = year
  }
 
  getInfo() {
    return `${this.title} (${this.author}, ${this.year})`
  }
}
 
// Использование такое же
const book = new Book("Название", "Автор", 2023)

Итог

  • Используйте конструкторы, когда нужно создать много однотипных объектов.
  • Всегда вызывайте конструкторы с new.
  • Называйте конструкторы с большой буквы и используйте существительные.
  • Используйте литералы объектов {} для простых одноразовых объектов.

Для сложных объектов со свойствами и методами, а также при необходимости многократного создания однотипных экземпляров, обязательно следует использовать конструкторы.

Боевой маршрут (JS Ваще с нуля)

Видеоурок - 27 видео из 29