Разве ES6 Class Syntax не предоставляет нам «классическое» наследование? - PullRequest
0 голосов
/ 12 июня 2019

Я понимаю, что в случае наследования прототипов объекты связаны друг с другом через цепочку прототипов.Наследование является «ССЫЛКОЙ» на некоторый другой живой объект (создание экземпляра).

Где, как и в случае наследования на основе классов, классы (шаблоны) создаются для внедрения наследования.Любой экземпляр подкласса "POSSESSES" - экземпляр родительского объекта.

Но как Javascript не реализует "классическое" наследование с синтаксисом ES6?С синтаксисом класса ES6 вы по сути создаете шаблоны.А при создании экземпляра объекта каждый раз создается отдельный живой экземпляр родительского объекта.Разве это не классическое наследство?

Ответы [ 2 ]

3 голосов
/ 12 июня 2019

Нет, синтаксис ES6 class не реализует классическое наследование.Методы класса по-прежнему размещаются в объекте .prototype, который связан с экземплярами посредством прототипного наследования.

Также не существует "шаблонизации".Атрибуты не объявляются заранее, форма экземпляров не фиксируется.Все это просто простые объекты, а их свойства создаются в конструкторе.

2 голосов
/ 12 июня 2019

Да, class должен вести себя как классы в других языках, поэтому он выглядит как "классическое наследование". Под капотом это все еще прототипное наследство.

class Animal {}
class Human {}

const me = new Human;

Object.setPrototypeOf(me, Animal.prototype);
console.log(me instanceof Animal); // true
...