📜  polyfill 调用 - Javascript (1)

📅  最后修改于: 2023-12-03 15:18:37.227000             🧑  作者: Mango

使用Polyfill调用 - Javascript

Polyfill指的是一个特殊的Javascript库,用于添加新的功能或修补已有的功能,从而使旧版本的浏览器能够支持这些新功能。Polyfill 通常与某个特定的Web API相关联。

Polyfill原理

在JavaScript代码中,使用新的API或新的功能时,需要检测当前浏览器是否支持这个API,如果不支持,则可以使用Polyfill提供的代码来替代这个API实现相同的功能。

普通的Polyfill代码如下:

if (!Array.prototype.forEach) {  
    Array.prototype.forEach = function(callback, thisArg) {  
        var T, k;  
        if (this == null) {  
            throw new TypeError(' this is null or not defined');  
        }  
        var O = Object(this);  
        var len = O.length >>> 0;  
        if (typeof callback !== "function") {  
            throw new TypeError(callback + ' is not a function');  
        }  
        if (arguments.length > 1) {  
            T = thisArg;  
        }  
        k = 0;  
        while (k < len) {  
            var kValue;  
            if (k in O) {  
                kValue = O[k];  
                callback.call(T, kValue, k, O);  
            }  
            k++;  
        }  
    };  
}   

上述代码是对JavaScript数组的的forEach方法进行Polyfill。 如果当前浏览器已经原生支持此方法,则不会对其进行替换操作。否则,将使用Polyfill代码提供的代码来实现此功能。

Polyfill怎么调用?

1.使用Polyfill库调用

一种使用方法是直接加载Polyfill库,例如 core-jsbabel-polyfill

例如,我们可以通过npm安装一个polyfill库,如下所示:

npm install --save core-js

在代码中调用Polyfill库:

import 'core-js';

或者使用Class中的静态方法

import {Polyfill} from 'core-js'; 

然后该库将自动引用浏览器缺少的所有功能。

2.手动导入Polyfill代码

另一种常用的方法是将Polyfill代码放在JavaScript文件中,并在需要使用它们的地方加载这些文件。

以前面提到的forEach Polyfill为例子:

if (!Array.prototype.forEach) {  
    Array.prototype.forEach = function(callback, thisArg) {  
        // Polyfill代码
    };  
}  

在HTML中导入该代码:

<!DOCTYPE html>  
<html>  
  <head>  
    <title>Polyfill Example</title>  
    <script src="polyfills.js"></script>  
  </head> 
  <body>  
    <!-- web 应用 -->  
  </body>  
</html> 

在这种情况下, Polyfill代码将在所有需要它们的Javascript文件加载之前加载。

结论

使用Polyfill库, Web应用程序就可以在所有流行的Web浏览器上运行,从而更好的提供用户体验。Polyfill代码的调用方法可能因特定库或代码而异,但是核心的原理是相同,即检测Web API的支持性,并在必要时提供替代代码。