Оператор возврата в конструкторах JS

Каков эффект оператора возврата в теле функции JavaScript, когда это используется в качестве конструктора для нового объекта (с 'новым' ключевым словом)?

9
задан Tony 30 May 2010 в 14:11
поделиться

2 ответа

Причина использования оператора new заключается в том, чтобы убедиться, что this внутри конструктора ссылается на контекст new , который поддерживает:

this.functionName = function(){...};

и позволяет использовать оператор instanceof :

function foo() {...}
var bar = new foo();
alert(bar instanceof foo);

Использование return {...} внутри такого конструктора сводит на нет оба этих эффекта, как этот не понадобится с таким шаблоном, а поскольку instanceof вернет false .

2
ответ дан 4 December 2019 в 08:50
поделиться

Обычно return просто выходит из конструктора. Однако, если возвращаемое значение является объектом, оно используется как значение выражения new .

Учтите:

function f() {
   this.x = 1;
   return;
}
alert((new f()).x);

отображает 1, а

function f() {
   this.x = 1;
   return { x: 2};
}
alert((new f()).x);

отображает 2.

22
ответ дан 4 December 2019 в 08:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: