Хочу разобраться с одной вещью, как работает оператор new когда функция конструктор возвращает что-то с помощью return.
Вот такой пример:
function fA(){
this.a = 1;
return function(){
this.a = 2;
}
}
var vA = new fA();
alert(typeof vA + " = " + vA);// function = function () { this.a = 2; }
Здесь мы при алерте получили "function = function () { this.a = 2; }
" вместо "object = [object Object]". Я понимаю это так:
new сначала создает новый объект с неопределенными свойствами, затем он вызывает функцию-конструктор. Так как функция-конструктор у нас возвращаєт функцию то в результате мы получаем не объект {a:1} а функцию function () { this.a = 2; } .
Но вот ещё пример:
function fB(){
this.b = 3;
return 4;
}
var vB = new fB();
alert(typeof vB + " = " + vB);// object = [object Object]
в этом случае по моим размышлениям алерт должен выдать сообщение "number = 4" а в действительности - "object = [object Object]".
Почему при создании объекта з помощью оператора new когда функция-конструктор возвращает (return) функцию или объект мы вместо нового объекта получаем возвращаемое значение, а когда функция-конструктор возвращает базовый тип (return 5 или return "тест string") получаем новий объект созданый new и инициализованый функцией-конструктором?