Polyfill adalah shim yang menggantikan panggilan asli dengan panggilan ke shim.
Misalnya, Anda ingin menggunakan objek navigator.mediaDevices, tetapi tidak semua browser mendukung ini. Anda bisa membayangkan perpustakaan yang menyediakan shim yang dapat Anda gunakan seperti ini:
<script src="js/MediaShim.js"></script>
<script>
MediaShim.mediaDevices.getUserMedia(...);
</script>
Dalam hal ini, Anda secara eksplisit memanggil shim daripada menggunakan objek atau metode asli. Polyfill, di sisi lain, menggantikan objek dan metode pada objek asli.
Sebagai contoh:
<script src="js/adapter.js"></script>
<script>
navigator.mediaDevices.getUserMedia(...);
</script>
Dalam kode Anda, sepertinya Anda menggunakan objek navigator.mediaDevices standar. Tapi sungguh, polyfill (adaptor.js dalam contoh) telah mengganti objek ini dengan miliknya sendiri.
Yang diganti dengan itu adalah shim. Ini akan mendeteksi apakah fitur tersebut didukung secara native dan menggunakannya jika ya, atau akan mengatasinya menggunakan API lain jika tidak.
Jadi, polyfill adalah semacam shim "transparan". Dan inilah yang dimaksud Remy Sharp (yang menciptakan istilah) ketika mengatakan " jika Anda menghapus skrip polyfill, kode Anda akan terus berfungsi, tanpa perubahan apa pun yang diperlukan terlepas dari polyfill yang dihapus ".