28. JS с нуля, ваще с нуля (прототип prototype)

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

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

Prototype

Автор конспекта: Стогниева Виктория

1. Основная цель функций-конструкторов 🎯

Функции-конструкторы предназначены для создания однотипных объектов, которые имеют одинаковое поведение, но отличаются внутренними характеристиками.

index.html
<link href="css/index.css" rel="stylesheet" type="text/css" />
<script src="js/car.js"></script>
<script src="js/index.js"></script>
car.js
function Car(name) {
  this.name = name
  this.isTurnOn = false
  this.speed = 0
  this.engine = {
    v: 1.6,
    horsesPower: 120,
    isTurnOn: false,
  }
 
  this.start = function () {
    this.isTurnOn = true
    this.speed = 10
    this.engine.isTurnOn = true
    console.log(this.name, "", this.speed)
  }
}
index.js
var reno = new Car("reno")
reno.start()
var mers = new Car("mers")
mers.start()

2. Проблема дублирования функциональности ⚠️

❌ Плохой подход — методы внутри конструктора:

method start

Проблемы:

  • 🗄️ Избыточное использование памяти - каждый объект содержит свои копии методов.
  • 🔁 Дублирование идентичного кода - одинаковые функции создаются многократно.
  • 📈 Снижение производительности - увеличение времени инициализации и потребления ресурсов.

3. Решение: Прототипы 💡

Что такое прототип?

  • 📋 Любая функция имеет свойство prototype.
  • 🔗 Это вложенный объект-контейнер для методов.
  • 🎯 Используется при вызове с оператором new.

✅ Правильный подход:

javascript
function Car(name) {
  this.name = name
  this.isTurnOn = false
  this.speed = 0
  this.engine = {
    v: 1.6,
    horsesPower: 120,
    isTurnOn: false,
  }
}
 
Car.prototype.start = function () {
  this.isTurnOn = true
  this.speed = 10
  this.engine.isTurnOn = true
  console.log(this.name, " ", this.speed)
}

4. Механизм поиска методов🎯

1)🔍 JavaScript ищет метод start в объекте reno.

2)📦 Если не находит — обращается к Car.prototype.start.

3)🎯 Вызывает метод с контекстом this = reno.

5. Ограничения: что НЕЛЬЗЯ помещать в прототип🚫

❌Примитивные свойства

javascript
Car.prototype.speed = 0 // ❌ ОПАСНО!
 
const reno = new Car("Reno")
console.log(reno.speed) // 0 (из прототипа)
 
reno.speed = 10 // Создается локальное свойство!
console.log(reno.speed) // 10 (локальное)

❌Сложные объекты

javascript
Car.prototype.engine = {
  // ❌ КАТАСТРОФА!
  v: 1.6,
  horsesPower: 120,
  isTurnOn: false,
}
 
const reno = new Car("Reno")
const mers = new Car("Mers")
 
reno.engine.isTurnOn = true // Меняет для ВСЕХ объектов!
console.log(mers.engine.isTurnOn) // true 😱

В протип цепляем только методы, в конструкторе определяем только свойства

Это золотое правило предотвращает:

  • 🎯 Дублирование кода - методы не повторяются в каждом экземпляре.
  • 🔗 Нежелательное общее состояние - свойства изолированы в отдельных объектах.
  • 🐛 Трудные для отладки ошибки - избегаем непредсказуемого поведения.
  • 📉 Потерю производительности - оптимизируем использование памяти и скорость.

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

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