Ключевое слово new в JavaScript используется для создания экземпляра объекта, который содержит функцию конструктора. При вызове функции-конструктора с оператором new выполняются следующие действия:
- Создается новый пустой объект;
- Внутреннее свойство prototype нового объекта (__proto__) становится таким же, как и у конструирующей функции;
- Переменная this указывает на вновь созданный объект. Свойство, объявленное с ключевым словом this, привязано к новому объекту;
- Созданный объект возвращается, когда функция-конструктор возвращает не примитивное значение (т.е. объект JavaScript). Если функция-конструктор возвращает примитивное значение, оно будет проигнорировано. Если в конце функции ничего не возвращается, то функция возвращает this.
Синтаксис:
new СonstructorFunction(arguments)
Параметры:
- ConstructorFunction: класс или функция, определяющая тип экземпляра объекта.
- Arguments: список значений, с которыми будет вызываться конструктор.
Рассмотрим пример:
function Fruit(color, taste, seeds) {
this.color = color;
this.taste = taste;
this.seeds = seeds;
}
// Создадим объект
const fruit1 = new Fruit('Желтый', 'Сладкий', 1);
// Выведем результат
console.log(fruit1.color);
// Получим: "Желтый"
В приведенном выше примере ключевое слово new создает пустой объект. Функция Fruit() включает три свойства - color (цвет), taste (вкус) и seeds (семена), которые декларируются с помощью ключевого слова this. Итак, новый пустой объект теперь будет включать в себя все эти свойства, то есть color, taste и seeds. Новые созданные объекты будут подобными fruit1.
Другой пример:
function Func() {
var c = 1;
this.a = 100;
}
// Выставим значение прототипу функции
Func.prototype.b = 200;
// Создадим объект
var obj = new Func();
// Выведем результат
console.log(obj.a, obj.b);
// Получим: 100 200
В приведенном выше примере ключевое слово new создает пустой объект, а затем устанавливает свойство prototype этого пустого объекта таким же, какое у функции Func(). Новое свойство b назначается с помощью Func.prototype. В итоге, новый объект также будет включать свойство b. Затем он привязывает к себе все свойства функции, объявленные внутри. В нашем случае Func() включает только одно свойство a, объявленное через this. Таким образом, новый пустой объект теперь ещё будет включать свойство a. Однако Func() также включает переменную c, которая не объявлена через this. А значит и не будет включена в новый объект. Наконец, возвращается вновь созданный объект. Также обратите внимание, что Func() не включает оператор return, следовательно компилятор неявно вставит в конец return this.
Комментарии (0)