Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Javascript

เหตุใดการอ้างอิงแบบวงกลมจึงไม่ดีในจาวาสคริปต์


การอ้างอิงแบบวงกลมจะเกิดขึ้นหากวัตถุสองชิ้นที่แยกจากกันผ่านการอ้างอิงถึงกัน

ในเบราว์เซอร์รุ่นเก่า การอ้างอิงแบบวงกลมเป็นสาเหตุของหน่วยความจำรั่ว ด้วยการปรับปรุงอัลกอริธึมการรวบรวมขยะ ซึ่งขณะนี้สามารถจัดการกับวงจรและการพึ่งพาแบบวนรอบได้ดี จึงไม่เป็นปัญหาอีกต่อไป

อย่างไรก็ตาม จากมุมมองของการออกแบบล้วนๆ การอ้างอิงแบบวงกลมยังคงเป็นสิ่งที่ไม่ดีและมีกลิ่นของโค้ด การอ้างอิงแบบวงกลมบอกเป็นนัยว่าวัตถุ 2 ชิ้นที่อ้างอิงถึงกันนั้นเชื่อมโยงกันอย่างแน่นหนา และการเปลี่ยนแปลงไปยังวัตถุหนึ่งอาจต้องมีการเปลี่ยนแปลงในอีกวัตถุหนึ่งด้วย

หลีกเลี่ยงการอ้างอิงแบบวงกลม

ไม่มีวิธีใดที่จะหลีกเลี่ยงการอ้างอิงแบบวงกลมใน JS ขึ้นอยู่กับกรณีการใช้งานและสถานการณ์และอาจจำเป็นในบางกรณี เราสามารถยกตัวอย่างเพื่อทำความเข้าใจสิ่งนี้:

สมมุติว่าคุณมีสิ่งของ 2 ชิ้นคือ Dog และ Person คุณต้องการให้อ้างอิงถึงเจ้าของสุนัขได้โดยใช้สิ่งของของสุนัขและสัตว์เลี้ยงของคนที่ใช้สิ่งของนั้น

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

ในสถานการณ์ส่วนใหญ่ คุณจะต้องเข้าถึงวัตถุเพียงชิ้นเดียวและสืบทอดอีกวัตถุหนึ่งจากวัตถุนั้น เพื่อให้คุณสามารถทำลายลิงก์ใดลิงก์หนึ่งได้ ถ้าไม่เช่นนั้น คุณสามารถใช้แผนที่เพื่อทำแผนที่วัตถุในสถานการณ์ย้อนกลับได้ แต่แทนที่จะใช้การแฮ็ก ปล่อยให้ผู้อ้างอิงวงกลมอยู่ที่นั่นดีกว่า