通常来说,在老版本的运行环境中扩展原生方法是唯一安全的,因为环境不太可能发生变化——支持新规范的新版本会完全替代老版本浏览器,而非在老版本上做扩展。
如果能预见哪些方法会成为新标准,如Array.protorype.foobar,如果规范中已经定义了Array.protorype.foobar,并且功能和下面的代码类似,这种情况一般称为 ployfill(或者shim)
// 将普通面命转为小驼峰命名
if (!Array.prototype.foobar) {
Array.prototype.foobar = function () {
this.push('foo', 'bar')
}
}
JS中的shim/polyfill
1.shim一般指一些做兼容性的库,用来弥补旧浏览器对新特性支持的不足。都会预先加载,强调新旧浏览器使用同一套代码。
2.polyfill也会对浏览器的不足做补充,但一般都会用语句来判断此浏览器是否支持此特性,然后通过动态引入script标签的方法来加载。