Оператор new

by 1 contributor:

This translation is incomplete. Please help translate this article from English.

Оператор new создает экземпляр объекта, встроенного или определенного пользователем, имеющего конструктор.

Синтаксис

new constructor[([arguments])]

Параметры

constructor
Функция, задающая тип объекта.
arguments
Список параметров, с которыми будет вызван конструктор.

Описание

Создание объекта, определенного пользователем, требует два шага:

  1. Написать функцию, которая задаст тип объекта.
  2. Создать экземпляр объекта, используя  new.

Чтобы определить новый тип объекта, создайте функцию, которая укажет его и имя и свойства. Свойство объекта также может быть объектом. Примеры приведены ниже.

Когда исполняется new Foo(...) , происходит следующее:

  1. Создается новый объект, наследующий Foo.prototype.
  2. Вызывается конструктор — функция Foo с указанными агргументами и this, привязанным к только что созданному объекту. new Foo эквивалентно new Foo(), то есть если аргументы не указаны, Foo вызывается без агрументов.
  3. Результатом выражения new становится объект, возвращенный конструктором. Если конструктор не возвращет объект явно, используется объект из п. 1. (Обычно конструкторы не возвращают значение, но они могут делать это, если нужно переопределить обычный процесс создания объектов.)

Всегда можно добавить свойство к уже созданному объекту. Например, car1.color = "black" добавляет свойство color к объекту car1, и присваевает ему значение "black". Это не затрагивает другие объекты. Чтобы добавить свойство ко всем объектам типа, нужно добавлять его в определение типа Car.

Добавить свойство к ранее определенному типу можно используя свойство Function.prototype. Это определит свойство для всех объектов, созданных этой функцией, а не тольку у какого-либо экземпляра. Следующий пример добавляет свойство color со значениеи null всем объектам типа car, а потом меняет эго на  "black" только у экземпляра car1. Больше информации в статье prototype.

function Car() {}
car1 = new Car();
 
console.log(car1.color);    // undefined
 
Car.prototype.color = null;
console.log(car1.color);    // null
 
car1.color = "black";
console.log(car1.color);   // black

Примеры

Тип объекта и экземпляры объекта

Предположим, нам нужен тип объекта для автомобилей. Этот тип должен называться car, и иметь свойста марка, модель и год:

function Car(make, model, year) {
  this.make = make;
  this.model = model;
  this.year = year;
}

Теперь можно создать экземпляр типа car:

var mycar = new Car("Eagle", "Talon TSi", 1993);

Это выражение создает экземпляр mycar и присваевает его свойствам указанные значения. Таким образом, mycar.make принимает значение "Eagle", mycar.year принимает значение 1993, и так далее.

Можно создать любое количество экземпляров car с помощью опреатора new. Например:

var kenscar = new Car("Nissan", "300ZX", 1992);

Объект в качестве свойства

Предположим, есть объект person:

function Person(name, age, sex) {
  this.name = name;
  this.age = age;
  this.sex = sex;
}

Создадим два экземпляра:

var rand = new Person("Rand McNally", 33, "M");
var ken = new Person("Ken Jones", 39, "M");

Изменим определение car, добавив свойство, указывающее владельца —  owner:

function Car(make, model, year, owner) {
  this.make = make;
  this.model = model;
  this.year = year;
  this.owner = owner;
}

Создадим экземпляры car:

var car1 = new Car("Eagle", "Talon TSi", 1993, rand);
var car2 = new Car("Nissan", "300ZX", 1992, ken);

Вместо строковых или численных значений можно передать обект как параметр. Чтобы узнать имя владельца car2, получим доступ к свойству:

car2.owner.name

Спецификации

Specification Status Comment
ECMAScript 2015 (6th Edition, ECMA-262)
Определение 'The new Operator' в этой спецификации.
Стандарт  
ECMAScript 5.1 (ECMA-262)
Определение 'The new Operator' в этой спецификации.
Стандарт  
ECMAScript 3rd Edition (ECMA-262)
Определение 'The new Operator' в этой спецификации.
Стандарт  
ECMAScript 1st Edition (ECMA-262)
Определение 'The new Operator' в этой спецификации.
Стандарт Изначальное определение. Реализовано JavaScript 1.0.

Совместимость с браузерами

Feature Chrome Firefox (Gecko) Internet Explorer Opera Safari
Basic support (Да) (Да) (Да) (Да) (Да)
Feature Android Chrome for Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
Basic support (Да) (Да) (Да) (Да) (Да) (Да)

См. также

Метки документа и участники

Contributors to this page: mazhuravlev
Обновлялась последний раз: mazhuravlev,
Скрыть боковую панель