Каков эффект оператора возврата в теле функции JavaScript, когда это используется в качестве конструктора для нового объекта (с 'новым' ключевым словом)?
Причина использования оператора new
заключается в том, чтобы убедиться, что this
внутри конструктора ссылается на контекст new , который поддерживает:
this.functionName = function(){...};
и позволяет использовать оператор instanceof
:
function foo() {...}
var bar = new foo();
alert(bar instanceof foo);
Использование return {...}
внутри такого конструктора сводит на нет оба этих эффекта, как этот
не понадобится с таким шаблоном, а поскольку instanceof
вернет false
.
Обычно 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.