Понемногу перебираюсь на JavaScript
ES6
синтаксис. По мере появления его нативной поддержки в nodeJS
и Chrome
. ES6
таит в себе множество не очевидных вещей. Больше всего я их встретил в class
-ах. Классы в ES6
это обширный набор синтаксического сахара для prototype
. С ними писать код приятнее, да и сам синтаксис вынуждает подходить к этому дисциплинированнее. В этой мини-заметке я опишу пары интересных моментов:
- Синтаксис допускает только короткие имена методов;
- Тело класса описывает методы, которые будут помещены в
prototype
и статические методы, которые будут помещены в сам объект класса. Так вот… Таким образом вы можете поступить только сметодами
иgenerator
-ми. Т.е. никакиххешей
, никакихчисел
,строк
,регулярных выражений
. Всё, что вы захотите поместить сверх методов и генераторов будет идти уже отдельными строками кода после описания класса; - Это ограничение довольно понятно. Дескать дисциплинирует все подобные вещи определять в конструкторе и не позволяет переписывать детьми в прототипе. Но…
Почему то(nodejs
не поддерживает статическиеgenerator
-ы. Не статические поддерживает, а на статические ловиsyntax error
. Наверное это багstatic * name()
); - Для удобного доступа к родительским методам (имею ввиду наследование классов) придуман
super
. Но… Если вы переопределяете конструктор класса, вы:- Обязаны вызвать
super
, чтобы получить доступ кthis
. - Да да. До этого момента
this
отсутствует как таковой. Соответственно вызвать родительский конструктор, предварительно задав какие-нибудь поля новому объекту, без бунов не получится. Зачем они так сделали? о_О.
- Обязаны вызвать
- Методы и генераторы заданные в теле класса будут не-
enumerable
. Но для получения их списка можно воспользоваться:Object.getOwnPropertyNames(Object.getPrototypeOf(this))
.
Пока что это все грабли на которые я наткнулся. В скором времени ожидается поддержка со стороны Firefox
.