Если вы не пытаетесь придерживаться строгого процедурного программирования в Javascript, иногда может возникнуть необходимость в том, чтобы у вас было общее состояние между различными экземплярами объектов одного и того же класса.
Javascript — это язык, основанный на прототипах (подробнее о языки, основанные на прототипах), а классы в Javascript на самом деле являются функциями, которые используют свойство, называемое прототипом, для реализации наследования для объектно-ориентированного программирования. Давайте рассмотрим это на примерах:

Пример 1:

function Animal(name, sound) {
  this.name = name ? name : this.name;
  this.sound = sound ? sound : this.sound;
}
Animal.prototype.introduce = function() {
  return this.sound + "! I am a " + this.name;
}
var animal = new Animal("Dog", "Woof");
console.log(animal.introduce()); // Woof! I am a Dog.

Пример 2:

Class Animal {
constructor(name, ) {
    this.name = name;
    this.sound = sound;
  }
introduce() {
    return this.sound + "! I am a " + this.name;
  }
}
var animal = new Animal("Dog", "Woof");
console.log(animal.introduce()); // Woof! I am a Dog.

Хотя синтаксически они различаются, оба приведенных выше кода внутренне практически одинаковы. Класс Animal {…}в Примере 2 автоматически присваивает внутренние определения прототипу. переменной Animal. Именно этот объект прототип содержит функцию конструктора и другие свойства ( функции и переменные ), которые могут быть явно назначается на основе требований. Вот хорошее подробное чтение по теме Классы в Javascript.
Функция конструктор указывает на Animal, которая в основном позволяет вам создавать экземпляры (или точно копировать) Animal. Теперь, когда вы делаете что-то вроде этого:

var animal = new Animal("Dog", "Woof");

переменная экземпляра является копией Animal, которая содержит объект _proto_, указывающий на прототип элемента Животное. Если вы еще не поняли, к чему все идет, позвольте мне сказать прямо здесь:

Свойство прототипа объекта Javascript является общим для всех экземпляров/копий объекта и может использоваться для хранения общих данных/состояния.

Когда вы пытаетесь получить доступ к свойству объекта с помощью this, механизм Javascript сначала ищет свойство в собственных свойствах экземпляра. Если он не найден, механизм возвращается к объекту _proto_, также известному как dunder proto, для поиска свойства в прототипобъект. Эта цепочка продолжается до самого верхнего предка, если только _proto_не равно null.
Свойства в прототипеможно переопределить с помощью простого присваивания с использованием this для объекта, чтобы он имел собственные значения.

Хорошо, тогда давайте прекратим эту сложную (или не очень) болтовню и перейдем к некоторому коду, чтобы продемонстрировать, как вы можете использовать прототип объекта в Javascript для обмена данными/состоянием. Ниже приведена суть кода. Вы также можете возиться с этим JS Bin.

Что ж, надеюсь, это действительно поможет, так как понимание всего 'все является объектом' в javascript может немного сбить с толку новичков в некоторых сценариях.

Спасибо, что дочитали до конца :) Продолжайте и покажите свою прототипированную человеческую признательность с помощью хлопков, если вы нашли это полезным, и не забудьте подписаться, если вы ожидаете большего.

С Рождеством!!