Как браузер узнает, что я нацеливаюсь на ES6? - PullRequest
0 голосов
/ 03 июля 2019

Я использую Typescript, и недавно я изменил параметры транспиляции для ES6 вместо ES5.

Я использовал определенный синтаксис, который всегда хорошо работал в ES5, но после изменения цели я начал получать эту ошибку в консоли браузера (Firefox):

Javascript ES6 TypeError: Class constructor Client cannot be invoked without 'new'

Я изменил код на подходящий синтаксис для ES6, и это устранило проблему, но я не понимаю, как браузер узнает, что сначала выдает эту ошибку, потому что точно такой же код работал раньше.

Сканирует ли анализатор javascript в браузере другие части базы кода и видит, что они они используют ES6, а затем отклоняют эту строку, поскольку она не соответствует ES6 код в другом месте ?

1 Ответ

1 голос
/ 03 июля 2019

Javascript не входит в какой-либо конкретный «режим».

Вероятно, на самом деле произошло то, что вы объявили class Client. Это синтаксис ES6, и он поставляется со специальным предупреждением, что вы должны использовать new Client для его создания. Теперь ваш компилятор скомпилировал это в обратно-совместимую function Client() .... Очевидно, что вы можете позвонить function без new. И это то, что вы где-то делали.

Итак, компиляция от class до function маскировала ошибку. Но, оставляя class как class (поскольку целевой режим ES6 не должен сводить его к function), браузер фактически имел дело с class и выдавал эту ошибку.

...