Но я не могу понять, ПОЧЕМУ?
ES2015 различает два типа функций:
- вызываемые функции: функции, которые можно вызывать без
new
, т.е. foo()
. - конструируемые функции: функции, которые можно вызывать с помощью
new
.
Возможность вызова или конструирования функции, или и того, и другого, зависит от того, как она определена.Спецификация просто диктует, что функции, объявленные через синтаксис метода, не могут быть построены.
Теперь, это не объясняет причины этого решения.Я не могу говорить за комитет TC39, но с ES2015 были предприняты четкие усилия, чтобы уменьшить некоторые неожиданные действия в отношении функций.Как таковое было установлено, как могут использоваться определенные типы функций.Метод концептуально не является конструктором, и поэтому вы не можете вызывать его как таковой.
Возможные функции:
Функции, которые можно вызывать:
- Функции стрелок
- Методы объекта / класса (через синтаксис метода)
- Функции генератора
- Асинхронные функции
Оба:
- Объявления функций / выражения