polyfill 的概念:用于实现浏览器并不支持原生 API 的代码。
下面举一个例子: document.querySelectorAll() 现在大多数浏览器都已经支持该方法,但是仍然存在一些比较老的版本的浏览器不支持该方法,此时如果写一个库,通过对该库的引用,从而使得浏览器可以和其他浏览器一样使用该方法,此时这个库就是 polyfill
那么我们要知道 jquery 不知 polyfill ,因为 jquery 主要在封装一些 api , 而 polyfill 的本质是 抹平不同浏览器的api之间的差异,而不是自己实现新的api
已经存在的polyfill
1、polymer : 让旧的浏览器可以使用 HTML5 中的 Web Componentpolyfill
2、FlushCanvas :是让无法使用的 canvas 的浏览器使用 canvas
polyfill 和 shim 的区别:
一个 shim 是一个库,它将一个新的 API 引入到一个旧的环境中,而且仅靠旧环境中已有的手段实现。
一个 polyfill 就是一个用在浏览器 API 上的 shim。