JavaScript: Оператор new
Оператор | Тип оператора | А | О | Типы значений |
---|---|---|---|---|
new … () |
new (со списком аргументов) | отсутствует | 1 | конструктор → объект |
new … |
new (без аргументов) | справа налево | 1 | конструктор → объект |
Оператор new используется для создания объектов. Операндом этого оператора должна быть функция. Функция, которая создаётся специально для работы с оператором new
, называется конструктором. Конструктор используется для инициализации нового созданного объекта:
function Obj() { this.x = 5; } var o = new Obj(); alert(o.x); // 5
Работает это всё (оператор new
с конструктором) следующим образом: встречая оператор new
интерпретатор создаёт новый пустой объект, затем он вызывает конструктор, и передаёт ему новый созданный объект в качестве значения ключевого слова this
. Внутри конструктора происходит инициализация свойств вновь созданного объекта. После того, как объект создан и инициализарован, оператор new
возвращает созданный объект.
Функция, которая создаётся специально, чтобы играть роль конструктора, не должна возвращать значение с помощью инструкции return
. Однако, если внутри конструктора всё же используется инструкция return
, возвращаемое значение определяется по следующему правилу:
- Если
return
возвращает какой-либо объект, этот объект становится значением всего выражения создания объекта, а созданный с помощью оператораnew
объект в этом случае просто уничтожается. - Если
return
возвращает значение примитивного типа то, оно просто игнорируется и возвращается объект созданный с помощью оператора new.
function Obj(num) { this.x = num; return {y:10}; } function Obj2(num) { this.x = num; return 100; } var o = new Obj(5); var o2 = new Obj2(5); alert(o.y); // 10 alert(o2.x); // 5
Если конструктору не передаётся никаких аргументов, скобки можно не ставить:
var o = new Object;
Примечание: чтобы отличать в коде обычные функции от конструкторов, имена конструкторов обычно начинают с заглавной буквы.
С этой темой смотрят: