Оператор new — это короткая строчка кода в JavaScript. Часть псевдоклассического создания экземпляров, new — это краткий и быстрый инструмент для оптимизированного создания объектов.

MDN объясняет, что оператор new позволяет разработчикам создавать экземпляр определяемого пользователем типа объекта или одного из встроенных типов объектов, который имеет функцию конструктора. Если вы можете обойтись без слегка искаженной метафоры, я считаю полезным представить new как микроволновую печь (своего рода). Это позволяет вам быстро и массово нагреть немного кода.

Под капотом наше ключевое слово new делает следующее (опять же из MDN):

  1. Создает пустой, простой объект JavaScript.
  2. Добавляет к новому объекту свойство (__proto__), которое ссылается на объект-прототип функции-конструктора.

Таким образом, свойства/объекты, добавленные в прототип функции построения, доступны для всех экземпляров, созданных из функции конструктора (с помощью new).

  1. Связывает вновь созданный экземпляр объекта с контекстом this (т. е. все ссылки на this в функции-конструкторе теперь относятся к объекту, созданному на первом шаге).
  2. Возвращает это, если функция не возвращает объект.

Итак, есть пара вещей, которые нужно распаковать. Что такое псевдоклассическая реализация? Это может показаться другим новым моментом изучения JS, если это ваш первый язык программирования (это мой), но корни наследования, управляемого классами, на самом деле заимствованы из других объектно-ориентированных языков (таких как Java, например).

Псевдоклассическое создание экземпляров имеет в своем распоряжении два мощных инструмента: этот и новый. Итак, давайте вернемся ко второму пункту из MDN: код this позволит разработчику задавать свойства для нового объекта, который ссылается на конструктор. объект-прототип функции.

Давайте посмотрим, что мы можем сделать в DevTools Google Chrome:

Выше мы создали простую маленькую функцию попкорна, которая принимает три параметра: тип, размер и логическое значение для «с MnMs».

Теперь, когда у нас есть построенная функция-конструктор, мы можем начать компилировать новые объекты для связи с нашим прототипом.

Здесь мы видим, как вызываются новые экземпляры нашей функции для быстрого и эффективного создания трех объектов (kernel1, kernel2 и kernel3).

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

Этот уровень наследования стал возможен благодаря цепочке прототипов объекта. При доступе к свойствам объекта JS будет знать, что нужно искать не только текущий объект, но и все объекты-прототипы. Этот поиск свойств является одним из наследственных программ.

Если текущий объект не содержит этого свойства, он переместится вверх по цепочке на одно поколение и будет искать там, и он будет продолжать этот поиск, пока не найдет рассматриваемое свойство или не достигнет конца строки в большом глобальном объекте в небо. Это связано с тем, что функции по своей сути несут свойство прототипа.

Иногда может показаться ошеломляющей попытка собрать воедино такие языки, как наследование, псевдоклассическое создание экземпляров, функции-конструкторы, попкорн и т. д.… но я думаю, что MDN очень кратко поясняет: когда вы используете (и будете использовать) new , все, что вы делаете, это возвращает объект, который является экземпляром этой функции-прототипа. Большой пакет вареной кукурузы — это всего лишь один экземпляр нашей функции попкорн.