Что может сделать прототипный подход, чего не может класс es6? - PullRequest
0 голосов
/ 06 марта 2019

Есть ли что-нибудь, чего можно достичь только с помощью классического / старого прототипа?

Зачем мне это нужно: представьте, что я пишу подмножество JS, свободное от старых вещей (прототипы вместо классов, var и т. Д.)

1 Ответ

2 голосов
/ 06 марта 2019

Существует несколько вещей, включая, но не ограничиваясь:

  • При использовании записи function вы можете вызывать конструктор без new.Запись class запрещает это.

    В качестве примечания: где подклассификация будет традиционно выполняться с чем-то вроде MyParentClass.call(this) (что недопустимо, когда MyParentClass был определен с class), теперь вы должны объединить classсинтаксис с ключевыми словами extends и super.

  • function объявления могут появляться после их использования, так как они подняты, объявления class не являются.
  • *Объявления 1023 * могут быть переопределены новым объявлением, объявления class не могут переопределить более раннее объявление
  • Методы прототипа могут использоваться в качестве конструкторов, когда они определены в старом стиле, а не когда они определены с использованием синтаксиса class.
  • function объявления могут быть сделаны в «неаккуратном» режиме (не строгом), в то время как методы class всегда работают в строгом режиме.Как следствие, вы не можете использовать свойства caller, callee или arguments метода / конструктора в нотации class.Все остальные последствия строгого режима также применимы, конечно.Было бы слишком далеко перечислять их все здесь.
  • Вы можете назначить новый объект свойству prototype функции старого стиля (оно доступно для записи).С class свойство prototype недоступно для записи (обратите внимание, что это не означает, что вы не можете mutate it).
...