如何避免 OOP Javascript 中的循环引用?

javascriptfront end technologyobject oriented programming

如果两个单独的对象相互传递引用,就会发生循环引用。

在旧版浏览器中,循环引用是内存泄漏的原因。随着垃圾收集算法的改进,现在可以很好地处理循环和循环依赖,这不再是问题。

但是,从纯粹的设计角度来看,循环引用仍然是一件坏事,是一种代码异味。循环引用意味着引用彼此的两个对象紧密耦合,对一个对象的更改可能也会导致另一个对象的更改。

避免循环引用

没有一种方法可以避免 JS 中的循环引用。这取决于用例和情况,在某些情况下也可能是必要的。我们可以举一个例子来理解这一点:

假设您有两个对象,Dog 和 Person。您希望能够仅使用狗对象引用狗的主人,并使用人对象引用人的宠物。

let dog = new Dog();
let person = new Person();
// 创建循环引用
dog.owner = person
person.pet = dog

在大多数情况下,您只需要访问一个对象并从中派生另一个对象。因此您可以断开其中一个链接。如果没有,那么您可以使用映射在反向场景中映射对象。但与其使用 hack,不如让循环引用存在。


相关文章