Вызов конструктора выполняется, когда за ключевым словом 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().