Этот вопрос проверяет понимание того, как JavaScript обрабатывает возврат примитивных значений из функций-конструкторов.
Если функция-конструктор возвращает примитивное значение (число, строку, boolean, null, undefined, символ), это возвращаемое значение игнорируется. В результате все равно возвращается вновь созданный объект, на который ссылается this. Механизм new переопределяет возврат примитивов.
Когда функция-конструктор возвращает примитивное значение, это не влияет на результат создания объекта.
Все примитивные типы игнорируются:
javascript
function Person(name) {
this.name = name;
// Все эти возвраты будут проигнорированы
return 42; // число
return 'строка'; // строка
return true; // boolean
return null; // null
return undefined; // undefined
return Symbol('символ'); // символ
}
const person = new Person('Иван');
console.log(person.name); // "Иван" - объект создан
console.log(person instanceof Person); // trueРассмотрим различные сценарии с возвратом примитивов:
javascript
// Пример 1: Возврат числа
function Car(brand) {
this.brand = brand;
return 100; // Игнорируется
}
const car = new Car('Toyota');
console.log(car.brand); // "Toyota"
console.log(car); // Car { brand: "Toyota" }
// Пример 2: Возврат undefined (явный и неявный)
function Bike(model) {
this.model = model;
// Неявный возврат undefined - объект создается
}
function Boat(name) {
this.name = name;
return undefined; // Явный возврат - также игнорируется
}
const bike = new Bike('Yamaha');
const boat = new Boat('Ладья');
console.log(bike instanceof Bike); // true
console.log(boat instanceof Boat); // trueВ отличие от примитивов, возврат объекта изменяет результат:
javascript
function TestPrimitive() {
this.value = 'original';
return 123; // Примитив - игнорируется
}
function TestObject() {
this.value = 'original';
return { value: 'custom' }; // Объект - заменяет результат
}
const test1 = new TestPrimitive();
const test2 = new TestObject();
console.log(test1.value); // "original"
console.log(test2.value); // "custom"Механизм оператора new специально игнорирует примитивные возвращаемые значения чтобы:
Сохранять консистентность создания объектов
Предотвращать случайные ошибки
Обеспечивать ожидаемое поведение конструкторов
Вывод: Возврат примитивных значений из функции-конструктора игнорируется - всегда возвращается объект, созданный оператором new. Это поведение гарантирует, что конструкторы всегда возвращают экземпляры объектов.