如何在面向对象编程的JavaScript中避免循环引用?


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

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

但是,从纯粹的设计角度来看,循环引用仍然是不好的,是一种代码坏味道。循环引用意味着互相引用的两个对象耦合度很高,一个对象的更改可能也需要更改另一个对象。

避免循环引用

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

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

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

在大多数情况下,您只需要访问一个对象并从中推导出另一个对象。因此,您可以断开其中一个链接。如果不是,您可以使用映射来映射反向场景中的对象。但是,与其使用技巧,不如让循环引用存在。

更新于:2019年9月17日

431 次浏览

启动您的职业生涯

通过完成课程获得认证

开始学习
广告