Movatterモバイル変換


[0]ホーム

URL:


  1. Веб-технологии для разработчиков
  2. JavaScript
  3. Справочник по JavaScript
  4. Выражения и операторы
  5. Оператор new

This page was translated from English by the community.Learn more and join the MDN Web Docs community.

View in EnglishAlways switch to English

Оператор new

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since ⁨июль 2015 г.⁩.

Оператор (операторная функция)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.

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

Примеры

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

js
car2.owner.name;

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

Specification
ECMAScript® 2026 Language Specification
# sec-new-operator

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

Смотрите также

Help improve MDN

Learn how to contribute

This page was last modified on byMDN contributors.


[8]ページ先頭

©2009-2025 Movatter.jp