Меню

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;

Примечание: чтобы отличать в коде обычные функции от конструкторов, имена конструкторов обычно начинают с заглавной буквы.