Понемногу перебираюсь на 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.