【问题标题】:Javascript private class fields or methods not working in iOS Chrome or SafariJavascript 私有类字段或方法在 iOS Chrome 或 Safari 中不起作用
【发布时间】:2021-07-27 19:54:49
【问题描述】:

使用 # 的 Javascript 私有字段或方法在 iOS 中是否有效?

例如,我有这个类:

Class A { 
    #privateFunction() {return ""} 
}

创建类 A 的实例适用于 Android 和桌面。但在 iOS 中,我收到以下错误:cannot find variable: A

我知道该错误与 iOS 有关,因为如果我将 privateFunction 公开,它会起作用。

我正在更新到最新 iOS 版本的真实 iPhone 设备上测试代码。

更新:我将 iOS 更新到 14.5.1,但没有任何变化。

【问题讨论】:

  • 我相信这仍然是实验性的
  • 哦,那我得重建整个班级。谢谢
  • caniuse.com/?search=private%20field这个网站告诉它覆盖了哪些浏览器
  • @StepPen-codes - 不,不再是实验性的,但仍然只是 刚刚在野外被 JavaScriptCore 支持。
  • 您将“私有类字段”和“私有类方法”混为一谈。 Safari 现在支持私有字段但不支持私有方法。 caniuse.com/?search=private%20class

标签: javascript ios google-chrome safari


【解决方案1】:

你在那里写的,即#privateFunction(),是一个私有方法,而不是一个私有字段。

早于 15 版的 Safari 不支持私有方法

在撰写本文时,这是MDN according to the Private class features page 中的浏览器支持:

由于任何现有的 Safari 版本都不支持 私有类方法,因此它在 iOS 14.5.1 上也不适用于您。

由于 iOS 设备仍然非常流行,我目前的建议是避免使用上面列出的大部分(如果不是全部)这些功能,直到将来浏览器兼容性得到改善为止。

好消息是,根据the official release notes,iOS 15 和 macOS 12 上的 Safari 15 支持私有类方法和访问器。

【讨论】:

  • 背景故事: 我遇到了一个客户,我为他编写了一个带有私有方法的 JavaScript 模块。一段时间后,客户抱怨他们的 iOS 设备上的客户都无法正常浏览网站。我将该方法转换为公共方法以使其工作。方法名称长且唯一,因此不太可能发生任何冲突。
  • 好像在 Safari 15 中添加了私有方法支持 developer.apple.com/documentation/safari-release-notes/…
【解决方案2】:

在 iOS 上,由于 Apple 政策¹,甚至 Chrome 也使用 Apple 的 JavaScriptCore JavaScript 引擎而不是其通常的 V8(并使用 WebKit 渲染引擎,而不是通常的 Blink)¹(所有其他浏览器也是如此)。

JavaScriptCore onlyjust 在 iOS 14.5 中添加了对私有字段的支持,因此您需要使用完全最新的设备(在撰写本文时)。该提案不再“进行中”,它在规范中(截至上一次 TC39 会议)。


¹ 他们不能使用自己的 JavaScript 引擎,因为这需要分配可执行内存,而 Apple 只允许 Apple 应用程序这样做。 (V8 确实添加了仅解释器模式,但 JavaScriptCore 是一个非常好的 JavaScript 引擎,而 iOS Chrome 人员只是使用它。)他们不能使用自己的渲染引擎,因为 Apple 不希望他们这样做,你 必须改用他们的 WebView 组件。

【讨论】:

  • 我明白了,感谢您的澄清,我检查了 iOS 版本,它是 14.4.2 我将更新它并再次测试代码
【解决方案3】:

Safari & Chrome IOS 14.5(10天前发布)支持JS Private Field。

IOS 中的 Safari 和 Chrome 必须更新到 14.5 才能使用 Class Private 字段

点击以下链接了解浏览器兼容性的更多信息,

https://caniuse.com/?search=private%20field

【讨论】:

  • 我检查了 iOS 版本,它是 14.4.2 我会更新它并再次测试代码谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-02-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-29
  • 1970-01-01
相关资源
最近更新 更多