Выражение new C(arg1, arg2)
:
Предполагается, что C является функцией JavaScript (в противном случае вы получаете сообщение об ошибке):
- Создает новый пустой объект (без свойств)
- Устанавливает прототип нового объекта в значение свойства "
prototype
" C
. - Примечание. Значением по умолчанию
prototype
для функции является объект (автоматически создаваемый при объявлении функции) с его прототипом, установленным на Object.prototype
, и свойством constructor
, указывающим обратно на функцию C
. - Примечание. Терминология может вводить в заблуждение.Свойство с именем «prototype» является , а не таким же, как и прототип объекта.Только функции имеют свойство с именем «prototype», но все объекты имеют прототип.
- Вызывает функцию
C
с 'this
', установленным для нового объекта, и спредоставленные аргументы. - Если вызов функции
C
возвращает объект, этот объект является результатом выражения.В противном случае вновь созданный объект является результатом выражения.
Альтернативой new
в ECMAScript 5 будет использование встроенного метода Object.createObject
.
new C(arg1, arg2)
будет эквивалентно:
var obj = Object.createObject(C.prototype);
C.apply(obj, [arg1, arg2]);
Стандартный JavaScript не позволяет вам явно установить прототип объекта, поэтому Object.createObject
не может быть реализовано в самом языке.Некоторые реализации позволяют это через нестандартное свойство __proto__.В этом случае new C
можно смоделировать так:
var obj = {};
obj.__proto__ = C.prototype;
C.apply(obj, [arg1, arg2]);