Оператор возврата в JS Constructors - PullRequest
8 голосов
/ 30 мая 2010

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

Ответы [ 2 ]

21 голосов
/ 30 мая 2010

Обычно return просто выходит из конструктора. Однако, если возвращаемое значение является Object, оно используется как значение выражения 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.

2 голосов
/ 30 мая 2010

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

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

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

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

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

...