В JavaScript любая правовая функция может использоваться в качестве конструктора объекта, который включает в себя как встроенные функции в системе, так и функции, определенные пользователем. Как только функция будет выполнена в качестве конструктора, это свойство внутри нее будет ссылаться на саму функцию.
Вообще говоря, конструкторы не возвращают значения, они просто инициализируют объект, переданный этим указателем и ничего не возвращают. Если функция имеет возвращаемое значение, возвращаемый объект становится значением нового выражения. С формальной точки зрения единственная разница между функцией, выполняемой в качестве конструктора или обычной функции, независимо от того, использует ли новый оператор.
Приведенное выше описание на самом деле имеет более точное значение.
Если возвращаемое значение функции - это данные о эталонном типе (массив, объект или функция), то когда эта функция выполняет конструкцию с новым оператором в качестве конструктора, результат операции будет заменен его возвращающимся значением На этот раз тело конструктора находится в этом значении, теряется и заменяется возвращенным объектом. Например:
Кода -копия выглядит следующим образом:
Функциональный тест ()
{
this.a = 10;
return function ()
{
возврат 1;
}
}
Alert m = новый тест ();
var n = test ();
предупреждение (m); // возвращение закрытия после возврата
предупреждение (n); // возвращать закрытие после возвращения
Значение выполняемого результата M и N одинаковы, оба являются закрытием, возвращаемыми функцией теста, и объект, на который ссылаются это, и результат назначения этого. A = 10 все отбрасываются.
Если возвращаемое значение функции является типом значения, то, когда функция выполняет конструкцию, используя новый оператор в качестве конструктора, его возвратное значение будет отброшено. Результатом нового выражения по -прежнему является объект, на который ссылаются это.
Кода -копия выглядит следующим образом:
Функциональный тест ()
{
this.a = 10;
возврат 1;
}
Alert m = новый тест ();
var n = test ();
Alert (m) // return [Object]
предупреждение (n) // Возврат 1.