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

ทำไม Circular Reference จึงไม่ดีใน JavaScript?

Circular reference เกิดขึ้นเมื่อออบเจ็กต์สองตัวส่งอ้างอิงให้กันและกัน

ในเบราว์เซอร์เก่า circular references ก่อให้เกิด memory leaks แต่ด้วยการปรับปรุงอัลกอริทึม Garbage Collection ที่จัดการ cycles และ cyclic dependencies ได้ดีแล้ว จึงไม่ใช่ปัญหาอีกต่อไป

อย่างไรก็aczy จากมุมมองการออกแบบ Circular referencing ยังถือเป็น bad practice และ code smell เพราะบ่งชี้ว่าออบเจ็กต์ทั้งสอง tightly coupled การเปลี่ยนแปลงอันหนึ่งอาจต้องเปลี่ยนอีกตัวด้วย

การหลีกเลี่ยง Circular References

ไม่มีวิธีเดียวในการหลีกเลี่ยง ขึ้นอยู่กับ use case และอาจจำเป็นในบางกรณี ตัวอย่าง:

สมมติมีออบเจ็กต์ 2 ตัวคือ Dog และ Person ต้องการอ้างอิงเจ้าของจาก dog และสัตว์เลี้ยงจาก person

let dog = new Dog(); let person = new Person(); // Creating a circular reference dog.owner = person person.pet = dog

ในสถานการณ์ส่วนใหญ่ต้องเข้าถึงแค่ออบเจ็กต์เดียวและ derive อีกตัวมาได้ จึงสามารถตัด link หนึ่งทิ้งได้ ถ้าไม่ได้ ให้ใช้ map เพื่อ map objects แบบย้อนกลับ แต่แทนที่จะใช้ hack แนะนำให้ปล่อย circular ref ไว้ก็ได้