IE11不会也不会实现ES2015代理对象。然而,IE11的扩展支持将于2025年10月14日结束。
有没有什么方法可以为IE11填充代理对象?所有其他浏览器都已经支持代理了。
如果是,那么我们今天都可以在生产中使用它。如果不是,我们将不得不等待近十年……
编辑:我特别要求IE11,因为我知道IE通常具有我通常不知道的IE特定功能。
Edit2:我特别感兴趣的是能够实现一个通用的拦截器。类似于Python中的__getattr__。它只需要在IE11中工作即可。
发布于 2017-08-02 15:04:34
发布于 2017-11-11 01:06:37
有一个相当简明的answer for this question on Quora
代理需要引擎级别的支持,并且不可能填充代理。
大多数主要的JS引擎还没有实现支持。查看ECMAScript 6 compatibility table。
你可能想要使用Object.observe来代替,可能在Chrome以外的浏览器上使用polyfills,但即使这样,该提议也已经被撤回,并宣布将在未来的版本中将其从Chrome中删除。
我个人还没有尝试过Object.observe解决方案,但它可能是一个很好的起点。
祝好运!
编辑:感谢Matt Jensen在评论中指出,实际上有一种方法可以使用这个包来填充ES6代理的某些部分:github.com/GoogleChrome/proxy-polyfill
太棒了
发布于 2017-08-23 22:28:26
在不支持此功能的环境中直接解决polyfill ES6代理,当然是不可能的-如果存储一些polyfill功能信息window.Proxy是不可能的。但是如果这样想的话,ES6的大多数现代特性都不能被支持,因为它们会给老版本的ECMAScript引擎带来语法错误。
这就是为什么你应该使用转译器,它在前面将ES6代码包装成特定的结构,然后在旧引擎上评估转换后的代码。在当前情况下,只需使用一个Babel插件:https://www.npmjs.com/package/babel-plugin-proxy
当然,在使用此解决方案时,您应该将Webpack配置为根据其功能集发现来为不同的客户端代理/浏览器隔离目标包。详情请看这里:https://gist.github.com/newyankeecodeshop/79f3e1348a09583faf62ed55b58d09d9
https://stackoverflow.com/questions/45285992
复制相似问题