Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 06.03.2011, 09:22
Новичок на форуме
Отправить личное сообщение для olek Посмотреть профиль Найти все сообщения от olek
 
Регистрация: 06.03.2011
Сообщений: 1

Как работает оператор 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 и инициализованый функцией-конструктором?
Ответить с цитированием
  #2 (permalink)  
Старый 06.03.2011, 10:43
Особый гость
Посмотреть профиль Найти все сообщения от monolithed
 
Регистрация: 02.04.2010
Сообщений: 4,260

возможно вы это имеете ввиду:

function Foo() {
    this.a = 2;
    
    this.b = function(a) { 
        return this.a*a; 
    };
}

var obj = new Foo;

alert([obj.a, obj.b(2)]);
Ответить с цитированием
  #3 (permalink)  
Старый 06.03.2011, 12:17
Профессор
Отправить личное сообщение для Sweet Посмотреть профиль Найти все сообщения от Sweet
 
Регистрация: 16.03.2010
Сообщений: 1,618

olek, давай ты почитаешь стандарт и расскажешь нам, почему так? Можешь начать здесь
Если очень хочешь примитивных значений, можно, видимо, так:
function test(){
  this.some = 3;
  return new Number(4);
};

alert([ new test(), typeof Number( new test() ) ]);
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Открытие div блока при первом визите на сайт Nushaba Общие вопросы Javascript 28 20.12.2013 21:24
Функция не возвращает false, почему? Vitaly jQuery 3 05.07.2009 16:05
Как изменить скрипт, что бы им его можно было использовать для нужной страницы Nick50_70 Общие вопросы Javascript 0 28.04.2009 23:30
Сторонние библиотеки - быть или не быть? IIIEPJIOK Оффтопик 64 21.03.2009 19:39
Как узнать о том, что флэш уже загрузился. Snipe Общие вопросы Javascript 4 29.01.2009 11:21