适用于 IE11 的 ES6 代理填充



IE11 不会也不会实现 ES2015 代理对象。然而,IE11 的扩展支持将于 2025 年 10 月 14 日结束。

有没有办法填充 IE11 的代理对象?所有其他浏览器都已经支持代理。

如果是,那么我们今天都可以在生产中使用它。如果没有,那么我们将不得不等待近十年......

编辑:我特别要求IE11,因为我知道IE通常具有我通常不知道的IE特定功能。

Edit2:我对能够实现一个包罗万象的拦截器特别感兴趣。类似于 Python 中的__getattr__。它只需要在IE11中工作。

你能得到的最好的是github:GoogleChrome/proxy-polyfill

根据 Babel 文档:

由于 ES5 的限制,代理无法转译或填充。

这个问题在 Quora 上有一个相当简洁的答案

代理

需要引擎级别的支持,并且无法填充代理。

大多数主要的JS引擎尚未实现支持。查看 ECMAScript 6 兼容性表。

您可能希望改用 Object.observation,可能与 Chrome 以外的浏览器的 polyfill 一起使用,但即便如此,该提案已被撤回,并且已宣布它将在未来的版本中删除。

我个人还没有尝试过 Object.observe 解决方案,但它可能是一个很好的起点。

祝你好运!

编辑:感谢Matt Jensen在评论中指出实际上有一种方法可以使用此软件包填充ES6 Proxy的某些部分:github.com/GoogleChrome/proxy-polyfill

填充ES6代理的直接解决方案 在没有支持此功能的环境中,当然是不可能的 - 如果存储一些填充函数信息窗口。代理的意思是。但是如果这样想,ES6 的大多数现代功能就无法得到支持,因为它们会引发旧版本 ECMAScript 引擎的语法错误。

这就是为什么你应该使用转译器,它执行将 ES6 代码包装到特定结构中的预先包装,然后在旧引擎上评估转换后的代码。在当前情况下,只需使用一个 Babel 插件:https://www.npmjs.com/package/babel-plugin-proxy

当然,在使用此解决方案时,您应该将 Webpack 配置为为不同的客户端代理/浏览器隔离目标捆绑包,具体取决于其功能集发现。在此处查看详细信息:https://gist.github.com/newyankeecodeshop/79f3e1348a09583faf62ed55b58d09d9

最新更新