如何避免OOP Javascript中的循环引用?
如果两个单独的对象相互传递引用,则会发生循环引用。
在较旧的浏览器中,循环引用是导致内存泄漏的原因。随着垃圾收集算法的改进,该算法现在可以很好地处理循环和循环依赖性,这不再是问题。
但是,从纯粹的设计角度来看,循环引用仍然是一件不好的事情,并且有代码臭味。循环引用意味着彼此引用的2个对象紧密耦合,对一个对象的更改可能还需要对另一个对象进行更改。
避免循环引用
在JS中,没有一种方法可以避免循环引用。它取决于用例和情况,在某些情况下也可能是必需的。我们可以举一个例子来理解这一点:
假设您有2个对象,“狗”和“人”。您希望能够仅使用dog对象来引用狗的所有者,而使用person对象来引用人的宠物。
let dog = new Dog(); let person = new Person(); //创建一个循环引用 dog.owner = person person.pet = dog
在大多数情况下,您只需要访问一个对象并从该对象派生另一个对象。因此您可以断开其中一个链接。如果不是,则可以使用映射在相反的情况下映射对象。但是,与其使用hack,不如使用循环引用。