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;
Примечание: чтобы отличать в коде обычные функции от конструкторов, имена конструкторов обычно начинают с заглавной буквы.
С этой темой смотрят: