36

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

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

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

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

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

4

3 回答 3

18

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

根据Babel 文档

由于 ES5 的限制,不能对代理进行转译或 polyfill。

于 2017-08-02T07:04:33.887 回答
8

Quora上有一个非常简洁的答案

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

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

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

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

祝你好运!

编辑: 感谢 Matt Jensen 在评论中指出事实上有一种方法可以使用这个包来填充 ES6 代理的某些部分:github.com/GoogleChrome/proxy-polyfill

惊人的

于 2017-11-10T17:06:37.057 回答
-5

在不支持此功能的环境中直接填充 ES6 Proxy 的解决方案当然是不可能的 - 如果存储一些 polyfill 函数信息 window.Proxy 的意思。但如果这样想,ES6 的大部分现代特性都无法支持,因为它们会引发旧版本 ECMAScript 引擎的语法错误。

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

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

于 2017-08-23T14:28:26.100 回答