SAFARI : Unexpected token '='. Expected an opening '(' before a method's parameter list

Sim*_* Mo 15 javascript safari

Got this code, that works perfectly in all browsers but not in Safari (Version 11.1.2).

class Account {
 accountFields = ['field1', 'field2', 'field3']
}
Run Code Online (Sandbox Code Playgroud)

Getting the following error in Safari debugger:

Unexpected token '='. Expected an opening '(' before a method's parameter list

所以我尝试在()任何地方添加,在数组周围,之前,之后等等。没有任何效果。

Nic*_*ons 25

您正在使用称为公共字段声明的实验性功能,该功能目前处于第 3 阶段唯一支持此功能的 Safari 版本是 v14.1(2021 年4 月 26发布)及更高版本。如果您需要支持旧版本的 Safari/更多种类的浏览器,您需要遵循以下建议之一。


您可以使用constructor() 方法来定义类实例的属性,而不是使用公共字段声明。使用构造函数确实具有良好的浏览器兼容性(对于 IE 支持,您可以使用构造函数):

class Account {
  constructor() {
    this.accountFields = ['field1', 'field2', 'field3'];
  }
}
Run Code Online (Sandbox Code Playgroud)

正如@Baz在评论中指出的那样,您也可以使用 Babel 作为替代解决方案。使用 babel 意味着您不必更改代码,如果您在整个项目中大量使用公共字段声明,这可以使您更轻松。Babel 会将您的现代 JS 代码转译/编译为许多浏览器可以理解的旧(ES5 及以下)JS 代码。你可以像这样使用这个babel 插件。

首先,安装 babel 插件:

npm install --save-dev @babel/plugin-proposal-class-properties
Run Code Online (Sandbox Code Playgroud)

然后将插件添加到您的配置文件中:

{
  "plugins": ["@babel/plugin-proposal-class-properties"]
}
Run Code Online (Sandbox Code Playgroud)

对于其他安装选项(babel CLI 等),请参阅插件文档的使用部分

  • 我有“版本 14.0.1”,但仍然遇到相同的错误。现在还不是测试版。 (2认同)