ชิม
หากคุณคุ้นเคยกับรูปแบบของอะแดปเตอร์คุณจะรู้ว่า shim คืออะไร Shims สกัดการเรียก API และสร้างเลเยอร์นามธรรมระหว่างผู้โทรและเป้าหมาย โดยทั่วไปแล้ว shims จะใช้สำหรับความสามารถในการย้อนกลับ ตัวอย่างเช่นแพ็กเกจes5-shim npm จะช่วยให้คุณเขียนไวยากรณ์ ECMAScript 5 (ES5) และไม่สนใจว่าเบราว์เซอร์กำลังเรียกใช้ ES5 หรือไม่ ใช้Date.nowเป็นตัวอย่าง นี้เป็นฟังก์ชั่นใหม่ ๆ ใน ES5 ที่ไวยากรณ์ใน ES3 จะเป็นวันใหม่ (). getTime () หากคุณใช้es5-shimคุณสามารถเขียนDate.nowและหากเบราว์เซอร์ที่คุณใช้อยู่รองรับ ES5 ก็จะทำงานได้ อย่างไรก็ตามหากเบราว์เซอร์ที่กำลังทำงานเครื่องยนต์ ES3 ES5-ชิมจะสกัดกั้นการเรียกร้องให้Date.nowและเพียงแค่คืนวันที่ใหม่ (). getTime ()แทน การสกัดกั้นนี้เรียกว่าการสั่นไหว ซอร์สโค้ดที่เกี่ยวข้องจาก es5-shim มีลักษณะดังนี้:
if (!Date.now) {
Date.now = function now() {
return new Date().getTime();
};
}
polyfill
โพลีฟิลลิ่งเป็นเพียงการฉายแสงแบบพิเศษ Polyfill นั้นเกี่ยวกับการนำคุณลักษณะที่ขาดหายไปมาใช้ใน API ในขณะที่ shim ไม่จำเป็นต้องเกี่ยวกับการนำคุณลักษณะที่ขาดหายไปมาใช้เท่าที่ควร ฉันรู้ว่าสิ่งเหล่านี้ดูเหมือนคลุมเครือเกินไป แต่ในกรณีที่ใช้ shims เป็นคำที่กว้างกว่านี้ Polyfill ใช้เพื่ออธิบาย shims ที่ให้ความสามารถในการย้อนหลังสำหรับเบราว์เซอร์รุ่นเก่า ดังนั้นในขณะที่ใช้ shims เพื่อปกปิดบาปเก่า ๆ polyfills จะถูกใช้เพื่อนำการปรับปรุงในอนาคตย้อนเวลากลับไป
ตัวอย่างเช่นมีการสนับสนุนสำหรับ sessionStorage ใน 7 ไม่มี แต่ polyfill ในที่sessionstorageแพคเกจ NPM จะเพิ่มคุณลักษณะนี้ใน IE7 (และเก่า) โดยใช้เทคนิคเช่นการจัดเก็บข้อมูลในชื่อคุณสมบัติของหน้าต่างหรือโดยการใช้คุกกี้