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

В JavaScript объекты создаются с помощью функций-конструкторов или литералов объектов. Функция-конструктор — это функция, которая создает и инициализирует объект с помощью ключевого слова «new».

Например:

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

const bharath = new Person('Bharath', 30);

В этом примере «Человек» — это функция-конструктор, которая создает объект со свойствами «имя» и «возраст». Ключевое слово «новое» используется для создания экземпляра объекта «Человек».

Каждый объект, созданный с помощью функции-конструктора, имеет свойство «прототип», которое представляет собой объект, служащий шаблоном для свойств и методов объекта. Объект-прототип является общим для всех экземпляров объекта, созданного с помощью функции-конструктора.

Например, мы можем добавить метод к объекту-прототипу функции-конструктора «Человек» следующим образом:

Person.prototype.greet = function() {
  console.log(`Hello, my name is ${this.name}`);
}

bharath.greet(); // logs "Hello, my name is Bharath"

В этом примере метод «greet» добавляется к объекту-прототипу «Person». Когда мы вызываем метод «greet» для экземпляра «bharath» объекта «Person», он сначала ищет метод «greet» для объекта «bharath». Если он не находит его там, он ищет его на объекте-прототипе.

Здесь вступает в действие концепция наследования. Если мы создадим новую функцию-конструктор для объекта «Учитель», мы сможем наследовать свойства и методы объекта «Человек», установив прототип «Учитель» в прототип «Человек». .

function Teacher(name, age, subject) {
  Person.call(this, name, age);
  this.subject = subject;
}

Teacher.prototype = Object.create(Person.prototype);

Teacher.prototype.teach = function() {
  console.log(`I teach ${this.subject}`);
}

const lalitha = new Teacher('Lalitha', 35, 'Math');
lalitha.greet(); // logs "Hello, my name is Lalitha"
lalitha.teach(); // logs "I teach Math"

В этом примере объект «Учитель» создается с помощью функции-конструктора, которая вызывает функцию-конструктор «Человек» с помощью метода «вызов». Это позволяет нам наследовать свойства «имя» и «возраст» от объекта «Персона».

Затем мы устанавливаем прототип «Учитель» на объект, созданный с помощью метода «Object.create», передавая объект «Person.prototype». Это устанавливает отношения наследования между объектами «Учитель» и «Человек».

Наконец, мы добавляем метод «teach» к объекту-прототипу «Teacher», который можно вызывать для экземпляров объекта «Teacher».

В заключение, понимание концепции прототипов в JavaScript имеет решающее значение для создания и работы с объектами, которые имеют отношения наследования. Присвоив прототипу объекта прототип другого объекта, мы можем наследовать свойства и методы и создавать мощный и гибкий код.