--- title: Оператор new slug: Web/JavaScript/Reference/Operators/new tags: - JavaScript - Левосторонние выражения - Оператор translation_of: Web/JavaScript/Reference/Operators/new ---
Оператор (операторная функция) new
создает экземпляр объекта, встроенного или определенного пользователем, имеющего конструктор.
new constructor[([arguments])]
constructor
arguments
Создание объекта, определенного пользователем, требует два шага:
new
.Чтобы определить новый тип объекта, создайте функцию, которая задаст его и имя и свойства. Свойство объекта также может быть объектом. Примеры приведены ниже.
Когда исполняется new Foo(...)
, происходит следующее:
Foo.prototype.
Foo
с указанными аргументами и this, привязанным к только что созданному объекту
. new Foo
эквивалентно new
Foo
()
, то есть если аргументы не указаны, Foo вызывается без аргументов.Всегда можно добавить свойство к уже созданному объекту. Например, 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 |
---|---|---|
{{SpecName('ES6', '#sec-new-operator', 'The new Operator')}} | {{Spec2('ES6')}} | |
{{SpecName('ES5.1', '#sec-11.2.2', 'The new Operator')}} | {{Spec2('ES5.1')}} | |
{{SpecName('ES3', '#sec-11.2.2', 'The new Operator')}} | {{Spec2('ES3')}} | |
{{SpecName('ES1', '#sec-11.2.2', 'The new Operator')}} | {{Spec2('ES1')}} | Изначальное определение. Реализовано JavaScript 1.0. |
{{CompatibilityTable}}
Возможность | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|
Базовая поддержка | {{CompatVersionUnknown}} | {{CompatVersionUnknown}} | {{CompatVersionUnknown}} | {{CompatVersionUnknown}} | {{CompatVersionUnknown}} |
Возможность | Android | Chrome for Android | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile |
---|---|---|---|---|---|---|
Базовая поддержка | {{CompatVersionUnknown}} | {{CompatVersionUnknown}} | {{CompatVersionUnknown}} | {{CompatVersionUnknown}} | {{CompatVersionUnknown}} | {{CompatVersionUnknown}} |