--- title: Оператор new slug: Web/JavaScript/Reference/Operators/new tags: - JavaScript - Левосторонние выражения - Оператор translation_of: Web/JavaScript/Reference/Operators/new ---
Оператор (операторная функция) new создаёт экземпляр объекта, встроенного или определённого пользователем, имеющего конструктор.
new constructor[([arguments])]
constructorargumentsСоздание объекта, определённого пользователем, требует два шага:
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
{{Compat}}