Привет! Спасибо за подробный ответ. Очень по делу.
Я думаю, что использование слова «государство» немного ввело меня в заблуждение. Особенно, если мы обсуждаем здесь семантику. То, что я имел в виду, было правильно объяснено вами на примере 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]].