boxsnake 回答了问题 · 2017-07-21
参见:CanIUse
![clipboard.png clipboard.png]()
IE8以下的是不支持这个方法的,而IE7兼容的JS文件实际的操作就是,用IE7兼容的方法自己实现某些不支持的特性,并将这些自己实现的方法命名的和原方法一致,然后将这种特性写到最上层的原型之中。由于原型链的关系,这样就相当于在IE7下也实现了功能。
比如IE7不支持getElementsByClassName
,这个JS通过判断是否有这个方法,如果没有则用自己定义的同名方法(用IE7支持的方式重写的具有相同作用的getElementsByClassName
方法),将它注入到原型中去。
这种方法一般被称为Polyfill,实现起来大致是这样
// 由于不知道最上层实现getElementsByClassName方法的类名,暂时称为X
if(!X.prototype.getElementsByClassName) {
X.prototype.getElementsByClassName = function() {
// 此处为自己实现的getElementsByClassName方法
};
}
这样由于IE8以上的自身有这个方法,所以不会进入if
判断内,而IE8及以下的版本,由于自身没有实现这个方法,就会进入判断,而判断内的代码正好补充了缺失的getElementsByClassName
方法。
IE8以下的是不支持这个方法的,而IE7兼容的JS文件实际的操作就是,用IE7兼容的方法自己实现某些不支持的特性,并将这些自己实现的方法命名的和原方法一致,然后将这种特性写到最上层的原型之中。由于原型链的关系,这样就相当于在IE7下也实现了功能。