Как работает оператор new когда функция-конструктор что-то возвращает ?
Хочу разобраться с одной вещью, как работает оператор 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 и инициализованый функцией-конструктором? |
возможно вы это имеете ввиду:
function Foo() { this.a = 2; this.b = function(a) { return this.a*a; }; } var obj = new Foo; alert([obj.a, obj.b(2)]); |
|
Часовой пояс GMT +3, время: 02:16. |