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

Примеры вызова конструктора: new Pet('Собака', 4), new RegExp('\\d').

В примере ниже объявляется функция Country, а затем вызывается как конструктор:

function Country(name, traveled) {
  this.name = name ? name : 'Италия';
  this.traveled = Boolean(traveled);
}
Country.prototype.travel = function() {
  this.traveled = true;
};

// Вызов конструктора
const france = new Country('Франция', false);
// Вызов конструктора
const italy = new Country;

france.travel()

new Country('Франция', false) - вызов конструктора функции Country. Этот вызов создает новый объект, в котором свойство name - "Франция".

Если конструктор вызывается без аргументов, пару скобок можно не указывать: new Country.

Начиная с ECMAScript 2015, JavaScript позволяет определять конструкторы, используя синтаксис классов:

class City {
  constructor(name, traveled) {
    this.name = name;
    this.traveled = false;
  }
  travel() {
    this.traveled = true;
  }
}

// Вызов конструктора
const paris = new City('Париж');

paris.travel();

new City('Париж') - вызов конструктора. Инициализация объекта обрабатывается специальным методом в классе: constructor, у которого this как вновь созданный объект.

Роль функции-конструктора - инициализировать экземпляр. Вызов конструктора создает новый пустой объект, который наследует свойства прототипа конструктора.

Когда методу-аксессору myObject.myFunction предшествует ключевое слово new, JavaScript выполняет вызов конструктора, но не вызывает метод.

Например, new myObject.myFunction(): функция сначала извлекается с помощью аксессора extractFunction = myObject.myFunction, а затем вызывается как конструктор для создания нового объекта: new extractFunction().