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