polyfill คือ shim ซึ่งแทนที่การโทรเดิมด้วยการเรียกไปที่ shim
ตัวอย่างเช่นสมมติว่าคุณต้องการใช้วัตถุ navigator.mediaDevices แต่ไม่ใช่ทุกเบราว์เซอร์ที่รองรับสิ่งนี้ คุณนึกภาพห้องสมุดที่ให้ชิมซึ่งคุณอาจใช้ในลักษณะนี้:
<script src="js/MediaShim.js"></script>
<script>
MediaShim.mediaDevices.getUserMedia(...);
</script>
ในกรณีนี้คุณเรียก shim อย่างชัดเจนแทนที่จะใช้วัตถุหรือวิธีการดั้งเดิม ในทางตรงกันข้าม polyfill แทนที่วัตถุและวิธีการในวัตถุต้นฉบับ
ตัวอย่างเช่น:
<script src="js/adapter.js"></script>
<script>
navigator.mediaDevices.getUserMedia(...);
</script>
ในรหัสของคุณดูเหมือนว่าคุณกำลังใช้วัตถุ navigator.mediaDevices มาตรฐาน แต่จริงๆแล้ว polyfill (adapter.js ในตัวอย่าง) ได้แทนที่วัตถุนี้ด้วยตัวของมันเอง
สิ่งที่มันแทนที่ด้วยมันคือชิมแปนซี สิ่งนี้จะตรวจสอบว่าคุณลักษณะนั้นได้รับการสนับสนุนตามธรรมชาติและใช้งานได้หรือไม่หรือมันจะแก้ไขโดยใช้ API อื่นหากไม่ได้ใช้
ดังนั้นโพลีฟิลล์จึงเป็นแบบ "โปร่งใส" และนี่คือสิ่งที่ Remy Sharp (ซึ่งเป็นคนบัญญัติศัพท์คำ) หมายถึงเมื่อพูดว่า " ถ้าคุณลบสคริปต์ polyfill รหัสของคุณจะยังคงทำงานต่อไปโดยไม่มีการเปลี่ยนแปลงใด ๆ ที่จำเป็นแม้ว่าโพลีจะถูกลบ "