Привет! Спасибо за подробный ответ. Очень по делу.

Я думаю, что использование слова «государство» немного ввело меня в заблуждение. Особенно, если мы обсуждаем здесь семантику. То, что я имел в виду, было правильно объяснено вами на примере Ruby.

В Javascript вы можете согласиться с чем-то вроде этого:

class Meaning {
  constructor() { this.value = 42;  }
  ofLife() {
    return this.value;
  }
}
// Create a new instance
var meaning = new Meaning();
meaning.ofLife();
// 42

И некоторое время спустя,

Meaning.prototype.ofLife = () => 'None at all';

Который захватит метод для каждого экземпляра Meaning когда-либо созданного, а также для будущих экземпляров. И ты даже не властен над этим. Вы можете передать свой объект любому старому function и изменить всю свою цепочку наследования, когда она выйдет.

Хотите немного больше примера из экстремальной стороны вещей?

Meaning.prototype.value = 'None at all';
delete meaning.value;
meaning.ofLife();
// 'None at all'
// Oops! Internal state change over here!

И это из-за схемы делегирования, которую я пытался объяснить в своем предыдущем комментарии.

Ничего подобного при классическом наследовании невозможно. Это просто не работает таким образом.

Я понял ваш комментарий и ваше предполагаемое сравнение. Ваш код хорош, и ваши пункты ясны. Конечно, вы можете сделать то, что описали, и это будет выглядеть как наследование, я вам так скажу. Но опять же, вы попадаете под историю «яблоки и апельсины» Кайла Симпсона. То, что вы называете «классическим наследованием», просто нет. И вы не можете имитировать это с помощью [[Prototype]].