1. конструктор

2. супер

3. расширяет

4. цепь прототипов

5. Миксины

Необходимые условия для этой статьи

1. — Как создать класс в ES6

2. — наследование в старых js. — Знать это важно.

ES6 может изменить то, как мы пишем код, но все остальное остается прежним, от цепочки прототипов до определения класса как функции. например, класс, определенный в ES6, по-прежнему является функцией.

Это означает, что может быть много видимых изменений, но за кулисами это все еще старая реализация функции.

Итак, начнем с наследования в ES6.

конструктор

  1. Конструктор по умолчанию всегда будет там. (Если вы не определили его)
  2. В наследовании класса

а. Конструктор должен вызывать метод super в начале, иначе он выдаст ошибку.

б. Конструктор по умолчанию автоматически вызывает super (который вызывает родительский конструктор).

супер

Он используется только при наследовании классов.

  1. Внутри конструктора — — — — — super()
  2. Внутри любого метода- — — — — super.parentMethod()

Проще говоря, вы должны вызвать super в конструкторе производного класса, прежде чем использовать this в конструкторе.

если вы не используете это в конструкторе, даже тогда super должен быть вызван до конца конструктора

Расширяет

Используется для установления наследования между двумя классами

Вот сравнение расширения класса до и после расширения

Теперь есть проблема с расширениями, т.е. вы можете расширить только один класс. Поскольку JavaScript не допускает множественного наследования,

Для решения этой проблемы у нас есть миксины

Итак, давайте посмотрим, что такое миксин.

примесь

Mixin используется для достижения особого вида множественного наследования, делая определенный список функций доступным в нескольких классах.

С миксином вы можете вводить методы в класс без наследования.

Давайте посмотрим, как мы это делаем

Если вы погуглите «mdn class», а затем прокрутите вниз до конца, вы получите базовую реализацию миксинов.

То, что они сделали здесь, это

Они создали стрелочную функцию, которая возвращает безымянный класс, т.е. динамически наследующий от параметра.

Цепочка прототипов для объекта класса Bar выглядит так

Единственный класс, который вы видите в цепочке прототипов, — это Foo, но у вас есть методы из других миксинов.

Еще один способ создания примесей — использование объектов и Object.assign для копирования всех перечислимых собственных свойств из одного или нескольких исходных объектов в целевой объект.

Если внимательно посмотреть на следующий пример, sayMixin назначается в качестве прототипа для sayHiMixin, оба из которых являются фактическими объектами, а затем sayHiMixin назначается прототипу класса User с помощью «Object.assign».

Посмотрите разницу в цепочке прототипов в обоих случаях и примите собственное решение, какой из них вы хотите использовать. Здесь следует отметить еще одну вещь: из-за разницы в цепочке прототипов использование слова «супер» может различаться. Я бы выбрал второй, просто потому, что он кажется мне понятным и не добавляет нежелательных цепочек к прототипу. Тем не менее у меня нет четкого ответа, какой из них лучше.

Могу ли я с позором просить аплодисментов, потому что

функция ваша оценка () {

вернуть мою мотивацию;

}();

видео к той же статье —

https://www.youtube.com/watch?v=pGesNVmwrKo&feature=youtu.be