用于IE11的ES6代理Polyfill

时间:2017-07-24 16:49:21

标签: javascript internet-explorer ecmascript-6 internet-explorer-11 es6-proxy

IE11不会也不会实现ES2015代理对象。 IE11的延长支持终止于2025年10月14日。

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

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

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

Edit2:我特别感兴趣的是能够实现一个全能拦截器。与Python中的__getattr__类似。它只需要在IE11中工作。

3 个答案:

答案 0 :(得分:10)

最好的是github: GoogleChrome/proxy-polyfill

根据Babel docs

  

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

答案 1 :(得分:3)

非常简洁answer for this question on Quora

  

代理需要在引擎级别上提供支持,并且无法填充代理。

     

大多数主流JS引擎尚未实施支持。查看ECMAScript 6 compatibility table

     

您可能希望使用Object.observe,可能需要使用Chrome浏览器之外的其他浏览器,但即使这样,该提案也已撤消,并且已宣布将在未来版本中将其从Chrome中删除。

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

祝你好运!

答案 2 :(得分:-2)

在不支持此功能的环境中直接解决polyfilling ES6 Proxy的问题,当然是不可能的 - 如果存储一些polyfill函数信息window.Proxy的意思。但是如果这样思考,ES6的大多数现代功能都无法得到支持,因为它们会引发旧版ECMAScript引擎的语法错误。

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

当然,在使用此解决方案时,您应该将Webpack配置为针对不同的客户端代理/浏览器隔离目标包,具体取决于它的功能集发现。详情请见https://gist.github.com/newyankeecodeshop/79f3e1348a09583faf62ed55b58d09d9