← Назад к вопросам

Что происходит при вызове new класса?

2.0 Middle🔥 171 комментариев
#JavaScript Core

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI2 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Что происходит при вызове new класса

В JavaScript при вызове new с классом или конструктором функцией запускается последовательность операций, которая создаёт новый объект и инициализирует его.

Пошаговый процесс

Когда вы пишете:

const person = new Person("Иван");

В точности происходит следующее:

  1. Создание пустого объекта — JavaScript создаёт новый пустой объект {}
  2. Установка [[Prototype]] — объекту присваивается внутренний прототип, указывающий на Person.prototype
  3. Вызов конструктора — функция Person вызывается с контекстом this, указывающим на новый объект
  4. Возврат объекта — если конструктор явно не возвращает объект, возвращается созданный объект

Пример с классом

class Person {
  constructor(name) {
    this.name = name; // this указывает на новый объект
    this.age = 0;
  }
  
  greet() {
    return `Привет, я ${this.name}`;
  }
}

const person = new Person("Мария");
console.log(person instanceof Person); // true
console.log(person.greet()); // "Привет, я Мария"

Что происходит с функция-конструктором

function Animal(type) {
  this.type = type;
  this.sound = "..."; // свойства добавляются к this
}

Animal.prototype.makeSound = function() {
  return `${this.type} издал звук: ${this.sound}`;
};

const dog = new Animal("собака");
dog.sound = "гав";
console.log(dog.makeSound()); // "собака издал звук: гав"

Цепочка прототипов

Основной момент — объект получает доступ к методам через цепочку прототипов:

  • dog.makeSound() — нет в самом объекте
  • Поиск идёт вверх по dog.__proto__Animal.prototype
  • Там находится метод makeSound

Что будет при явном возврате

function BadConstructor() {
  this.name = "obj";
  return { different: true }; // явный возврат объекта
}

const result = new BadConstructor();
console.log(result.name); // undefined (вернулся другой объект)
console.log(result.different); // true

Ключевые моменты

  • Если конструктор возвращает примитив или null — возврат игнорируется, возвращается созданный объект
  • Если возвращает объект — возвращается именно тот объект (original теряется)
  • this в конструкторе — всегда указывает на новый создаваемый объект
  • instanceof работает — благодаря связи через [[Prototype]]
  • Классы в ES6 — синтаксический сахар над функциями-конструкторами

Это фундаментальный механизм JavaScript, на котором строится вся объектная ориентация в языке.