Un polyfill est une cale qui remplace l'appel d'origine par l'appel à une cale.
Par exemple, supposons que vous souhaitiez utiliser l'objet navigator.mediaDevices, mais que tous les navigateurs ne le prennent pas en charge. Vous pourriez imaginer une bibliothèque qui fournirait une cale que vous pourriez utiliser comme ceci:
<script src="js/MediaShim.js"></script>
<script>
MediaShim.mediaDevices.getUserMedia(...);
</script>
Dans ce cas, vous appelez explicitement un shim au lieu d'utiliser l'objet ou la méthode d'origine. Le polyfill, d'autre part, remplace les objets et les méthodes sur les objets d'origine.
Par exemple:
<script src="js/adapter.js"></script>
<script>
navigator.mediaDevices.getUserMedia(...);
</script>
Dans votre code, il semble que vous utilisiez l'objet standard navigator.mediaDevices. Mais vraiment, le polyfill (adapter.js dans l'exemple) a remplacé cet objet par le sien.
Celui avec lequel il l'a remplacé est une cale. Cela détectera si la fonctionnalité est prise en charge en mode natif et l'utilisera si elle l'est, ou elle fonctionnera en utilisant d'autres API si ce n'est pas le cas.
Un polyfill est donc une sorte de cale "transparente". Et c'est ce que Remy Sharp (qui a inventé le terme) voulait dire en disant " si vous supprimiez le script polyfill, votre code continuerait à fonctionner, sans aucune modification requise malgré la suppression du polyfill ".