Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> JavaScript

ทำไมต้องใช้ WeakMaps ใน JavaScript?

WeakMap object เป็นคอลเลกชันของ key/value pairs ที่ keys ถูกอ้างอิงแบบ weak (weakly referenced) Keys ต้องเป็น objects และ values สามารถเป็นค่าใดๆ ได้

ตาม Wikipedia Weak reference คือการอ้างอิงที่ไม่ปกป้องออบเจ็กต์ที่ถูกอ้างอิงจากการถูกเก็บโดย garbage collector ไม่เหมือน strong reference ออบเจ็กต์ที่ถูกอ้างอิงเฉพาะโดย weak references — หมายถึง "ทุก chain ของ references ที่ถึงออบเจ็กต์มี weak reference อย่างน้อยหนึ่งลิงก์" — ถือว่า weakly reachable และสามารถถูกเก็บได้ทุกเมื่อ

Use cases ที่จะก่อให้เกิด memory leak แต่แก้ได้ด้วย weak maps:

  • เก็บข้อมูลส่วนตัวเกี่ยวกับออบเจ็กต์เฉพาะ และให้เข้าถึงได้เฉพาะคนที่มี reference ไปยัง Map

  • เก็บข้อมูลเกี่ยวกับ library objects โดยไม่เปลี่ยนแปลงพวกมันหรือเพิ่ม overhead

  • เก็บข้อมูลเกี่ยวกับชุดเล็กของ objects ที่มี objects ประเภทเดียวกันเยอะ เพื่อไม่ให้เกิดปัญหากับ hidden classes ที่ JS engines ใช้

  • เก็บข้อมูลเกี่ยวกับ host objects เช่น DOM nodes ในเบราว์เซอร์

  • เพิ่มความสามารถให้ออบเจ็กต์จากภายนอก