鍍金池/ 問答/HTML/ 使用babel-runtime兼容Set、Map、Promise等接口的疑惑?

使用babel-runtime兼容Set、Map、Promise等接口的疑惑?

在支持上述接口的瀏覽器中,babel-runtime是使用原生的api還是它模擬的api ?

回答
編輯回答
冷溫柔

babel-runtime 不會轉(zhuǎn)譯實例方法,如 "foobar".includes("foo")之類的實例方法。

對于Set Map Promise 等全局對象的兼容,babel-runtime提供了polyfill選項:

polyfill

boolean, defaults to true.
Toggles whether or not new built-ins (Promise, Set, Map, etc.) are transformed to use a non-global polluting polyfill.

也就是說,如果polyfilltrue無論瀏覽器支不支持Promise等新全局對象,瀏覽器都會使用babel-runtime轉(zhuǎn)換后的全局對象

如果polyfill設(shè)為 false,在不支持上述接口的瀏覽器中,會報錯。在支持上述接口的瀏覽器中,則會使用瀏覽器原生的對象。

以下是三種不同的情況下打印Promise對象,可以看出明顯區(qū)別:

  • polyfilltrue, 瀏覽器支持Promise

    clipboard.png

  • polyfillfalse, 瀏覽器支持Promise

    clipboard.png

  • polyfillfalse, IE瀏覽器不支持Promise

    clipboard.png

參考:

  1. Runtime transform

2017年6月11日 05:38