evgeniy8705
@evgeniy8705
Повелитель вселенной

Прототипы или Классы?

Сейчас смотрел вебинар про ES6, и так вот, там сказали что типо больше не придется использовать прототипное наследование, так как в ES6 есть классы.

Сейчас как раз вникаю в тему ООП в JS(изучаю прототипное наследование).
И так вот, после вебинара, появился вопрос - стоит ли вообще вникать в тему прототипного наследования или сразу изучать ES6 и использовать обычные классы?

PS. Возможно я что то понял не так, и классы не заменят прототипы. Поэтому прошу разъеснить что к чему.
  • Вопрос задан
  • 2970 просмотров
Пригласить эксперта
Ответы на вопрос 4
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
tl;dr
В JS нет классов, это просто синтаксический сахар.

Отличительная особенность классов - это самостоятельная сущность, которая существует в единственном экземпляре и доступен глобально. В JS "класс" это именованный конструктор + надстройка, которая расширяет прототип и добавляет к инстансу поля с анонимными функциями (то что записывается как static методы). Вы спокойно можете где-то в проекте поменять прототип объекта. Или еще чего.... То есть по сути

class Foo {
    constructor() {}
}


это полный эквивалент

function Foo() {
}


и только. Все остальное - сахар над Object.create. То есть как это работает вы знать обязаны, вы должны понимать разницу между объектной моделью в какой-нибудь джаве и javascript.
Ответ написан
Комментировать
In4in
@In4in
°•× JavaScript Developer ^_^ ו°
Да пока это все появится в списке поддерживаемого браузерами, столько времени пройдет.

А вообще, Хороший разработчик должен знать все по своей теме, так как заказчики бывают разные и со своими условиями, как и ситуации - иногда нужно поработать экскаватором, а иногда лопатой.
Ответ написан
k12th
@k12th
console.log(`You're pulling my leg, right?`);
Классы работают все на тех же прототипах, это просто синтаксический сахар.

Вникнуть стоит по двум причинам:
1) мегатонны легаси-кода, которое использует миллион и еще одну вариацию на тему классического наследования по Крокфорду
2) Прототипы никуда не делись, если вам нужно вызвать метод класса в контексте другого объекта, то воленс-ноленс придется писать MyClass.prototype.myMethod.
Ответ написан
Комментировать
rajdee
@rajdee
Front-end developer
Как и писали выше, классы - это всего лишь синтаксический сахар, с некоторыми дополнительными возможностями. По сути, все возможности предоставляемые классами, были доступны и ранее, только в другой форме, но в любом случаи, плюсов от их использования больше, чем минусов:
  • наглядность и простота - это особенно актуально для программистов, пришедших с ОО языков программирования
  • стандартизация реализации и синтаксиса. Все больше фреймворков, библиотек и даже языков программирование переходят на использование нативного синтаксиса классов и модулей ES2015, например, React, Ember.js или Typescript


Но добавили многое - это и конструкторы, использование super-методов, статические методы, наследование классов.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы