浏览器如何知道我的目标是 ES6?
How does the browser know I'm targeting ES6?
我正在使用 Typescript,并且我最近将转译选项更改为针对 ES6 而不是 ES5。
我使用的某种语法在 ES5 下一直运行良好,但在目标更改后,我开始在 (Firefox) 浏览器控制台中收到此错误:
Javascript ES6 TypeError: Class constructor Client cannot be invoked without 'new'
我将代码更改为适用于 ES6 的语法,这解决了问题,但我不明白浏览器如何首先知道抛出此错误,因为之前使用的代码完全相同。
浏览器中的 javascript 解析器是否扫描代码库的 其他 部分并查看它们 它们 使用 ES6 ,然后拒绝这一行,因为它与 ES6 代码不匹配 elsewhere?
Javascript 没有输入任何特定的 "mode".
可能真正发生的事情是您声明了 class Client
。那是 ES6 语法,它带有一个特殊的警告,你必须使用 new Client
来实例化它。现在,您的编译器将其编译成 backwards-compatible function Client() ...
。显然,您可以在没有 new
的情况下调用 function
。这就是你在某处所做的事情。
因此,从 class
到 function
的编译掩盖了错误。但是当将 class
保留为 class
时(因为 ES6 目标模式不需要将其简化为 function
),浏览器实际上是在处理 class
并引发那个错误。
我正在使用 Typescript,并且我最近将转译选项更改为针对 ES6 而不是 ES5。
我使用的某种语法在 ES5 下一直运行良好,但在目标更改后,我开始在 (Firefox) 浏览器控制台中收到此错误:
Javascript ES6 TypeError: Class constructor Client cannot be invoked without 'new'
我将代码更改为适用于 ES6 的语法,这解决了问题,但我不明白浏览器如何首先知道抛出此错误,因为之前使用的代码完全相同。
浏览器中的 javascript 解析器是否扫描代码库的 其他 部分并查看它们 它们 使用 ES6 ,然后拒绝这一行,因为它与 ES6 代码不匹配 elsewhere?
Javascript 没有输入任何特定的 "mode".
可能真正发生的事情是您声明了 class Client
。那是 ES6 语法,它带有一个特殊的警告,你必须使用 new Client
来实例化它。现在,您的编译器将其编译成 backwards-compatible function Client() ...
。显然,您可以在没有 new
的情况下调用 function
。这就是你在某处所做的事情。
因此,从 class
到 function
的编译掩盖了错误。但是当将 class
保留为 class
时(因为 ES6 目标模式不需要将其简化为 function
),浏览器实际上是在处理 class
并引发那个错误。