let Test = function() {
this.num = 5;
return { num: { valueOf: function() { return 2; } } };
};
let x = Test();
let y = new Test();
console.log(y.num + x.num); // ?
Пояснение
Если в функции-конструкторе всё-таки есть return, то при вызове конструктора даже вместе с оператором new поведение может измениться.
Если в return возвращается объект, то возвращается именно он, т.е. вместо нового объекта, которому бы через this.prop = some; заполнились бы свойства.
Если бы вместо строки return { num: { valueOf: function() { return 2; } } };
была бы строка
return 5;
то, такой return бы проигнорировался при вызове конструктора с оператором new.
Кстати, после выполнения кода из задачи в объекте window создалось свойство num со значением 5.