Этот вопрос проверяет понимание условий, при которых функция-конструктор действительно создает объект, и исключений из этого правила.
Нет, функция-конструктор создает объект не всегда. Если функция вызывается без оператора new, объект не создается. Также, если конструктор явно возвращает объект, то созданный автоматически объект игнорируется. Только при вызове с new и без возврата объекта создается новый экземпляр.
Функция-конструктор создает объект только при определенных условиях.
При нормальном использовании с оператором new:
javascript
function Person(name) {
this.name = name;
// Не возвращаем значение явно
}
const person = new Person('Иван');
console.log(person instanceof Person); // true - объект созданБез оператора new объект не создается:
javascript
function Person(name) {
this.name = name;
}
const result = Person('Иван'); // Вызов без new
console.log(result); // undefined - объект не созданЕсли возвращается примитивное значение, оно игнорируется:
javascript
function Person(name) {
this.name = name;
return 42; // Примитив игнорируется
}
const person = new Person('Иван');
console.log(person.name); // "Иван" - объект созданЕсли возвращается объект, он заменяет созданный объект:
javascript
function Person(name) {
this.name = name;
return { custom: 'object' }; // Объект подменяет созданный
}
const person = new Person('Иван');
console.log(person); // { custom: 'object' } - не Person
console.log(person instanceof Person); // falseОбъект создается когда:
Функция вызывается с оператором new
Функция не возвращает объект (или возвращает примитив)
javascript
function Car(brand) {
// Проверяем, вызвана ли с new
if (!(this instanceof Car)) {
console.log('Объект не создан - вызвано без new');
return;
}
this.brand = brand;
}
const car1 = new Car('Toyota'); // Объект создан
const car2 = Car('Honda'); // Объект не созданВывод: Функция-конструктор создает объект только при вызове с new и когда не возвращает другой объект. Понимание этих условий помогает избежать неожиданного поведения в коде.