12

IE11不會也不會實現ES2015代理對象。然而,擴展支持IE11的到底是10月14日,2025年ES6代理填充IE11

有什麼辦法來填充工具代理對象爲IE11?所有其他瀏覽器已經支持代理。

如果是的話,那麼我們都可以在今天將其用於生產。如果沒有,那麼我們將不得不等待將近十年...

編輯:我專門詢問IE11,因爲我知道IE瀏覽器通常有我常常不知道IE特定功能。

EDIT2:我在能夠實現一個包羅萬象的截擊機特別感興趣。類似於Python中的__getattr__。它只需要在IE11中工作。

+1

簡短搜索顯示[github:GoogleChrome/proxy-polyfill](https://github.com/GoogleChrome/proxy-polyfill)。你至少應該參考這一個,並說出爲什麼它是不夠的。 –

+1

@ t.niese它不支持全部屬性獲取器,即通配符陷阱。但全部陷阱是代理對象最令人興奮的功能之一。至於提到目前的嘗試,我正在考慮回答我自己的問題。 – brillout

+9

代理服務器是ES6的全新引擎級功能,無法對其進行填充。你不得不放棄IE11的支持。 – loganfsmyth

回答

2

最好的,你可以得到的是github: GoogleChrome/proxy-polyfill

根據Babel docs

由於ES5的限制,代理不能transpiled或polyfilled。

+0

我正在尋找一個IE11 polyfill而不是用於ES5 pollyfill,正如OP中多次聲明的那樣。你提到的圖書館不支持全能的獲得者。 OP再次明確提到對全能吸氣劑的興趣。 – brillout

+0

根據babel團隊的說法,我記得並且明白,由於ES5的限制(也被ie11使用),所以不可能完全實現代理polyfill,代理應該在引擎級別上實現。這就是我想解釋的,當我說這個lib是最好的,你可以得到。 更多這裏: [評論github在babel](https://github.com/babel/babel/issues/71#issuecomment-59113761), [類似問題quora](https://www.quora。 com-is-there-a-way-to-implement -ES-ES6-proxy-under-ES5) – Dolf

+0

另外,類似的問題: https://stackoverflow.com/questions/2357618/is-there-such-作爲一個捕捉所有的鍵爲一個JavaScript對象 https://stackoverflow.com/questions/994143/javascript-getter-for-all-properties – Dolf

1

在不支持此功能的環境中,爲填充ES6 Proxy的直接解決方案當然是不可能的 - 如果存儲某個polyfill函數信息窗口。代理是指。但是如果這樣思考,ES6的大多數現代功能都不能被支持,因爲它們會引發舊版ECMAScript引擎的語法錯誤。

這就是爲什麼你應該使用transpiler,其執行前面的包裝ES6代碼轉換成特定的結構,然後評估對舊發動機改造代碼。在當前情況下,只需使用一個Babel插件:https://www.npmjs.com/package/babel-plugin-proxy

當然,在使用此解決方案時,應該配置Webpack以根據其功能集發現爲不同的客戶端代理/瀏覽器分隔目標綁定。查看詳情這裏:https://gist.github.com/newyankeecodeshop/79f3e1348a09583faf62ed55b58d09d9

1

有相當簡潔answer for this question on Quora

代理需要對發動機水平的支持,這是不可能的填充工具代理。

大多數主要的JS引擎尚未實施的支持。檢查出ECMAScript 6 compatibility table

您可能希望使用Object.observe,而不是Chrome瀏覽器的polyfills,但即使此時提案已被撤消,並且已宣佈它將在未來的版本中從Chrome中移除。

我個人還沒有嘗試過Object.observe解決方案,但它可能是一個很好的開始。

祝你好運!

+0

@Dolf你有沒有遇到過這種情況? – George