Пусть у нас есть функция-конструктор, объявляющая класс Person
.
function Person(name, age) { this.name = name; this.age = age; } Person.prototype.hello = function () { return `Я ${this.name}, мне ${this.age}, и я учу джаваскрипт.`; };
Мы можем создать экземпляр класса Person
с помощью оператора new
.
const petya = new Person("Петя", 25); console.log(petya.name); // Петя console.log(petya.age); // 25 console.log(petya.hello()); // Я Петя, мне 25, и я учу джаваскрипт.
Реализуйте функцию nouveau
, которая работает так же, как оператор new
. Первый её аргумент — функция-конструктор, а остальные — аргументы, с которыми мы хотим вызвать функцию-конструктор.
const petya = nouveau(Person, "Петя", 25); console.log(petya.name); // Петя console.log(petya.age); // 25 console.log(petya.hello()); // Я Петя, мне 25, и я учу джаваскрипт.
Подробнее про метод new
можно прочитать на MDN.
When a function is called with the new keyword, the function will be used as a constructor. new
will do the following things:
newInstance
.[[Prototype]]
to the constructor function's prototype property, if the prototype is an Object. Otherwise, newInstance stays as a plain object with Object.prototype
as its [[Prototype]]
.newInstance
as the this context (i.e. all references to this in the constructor function now refer to newInstance).