Выражение new C(arg1, arg2)
:
Предполагая, что C является функцией JavaScript (иначе вы получите сообщение об ошибке):
prototype
"C
. Примечание. Значение по умолчанию для функции prototype
для объекта - это объект (автоматически созданный при объявлении функции), с его прототипом, установленным на Object.prototype
и свойство constructor
, указывающим на функцию C
. Примечание. Терминология может вводить в заблуждение. Свойством, названным «прототипом», является не так же, как прототип объекта. Только функции имеют свойство «прототип», но все объекты имеют прототип. 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]);