ventana una solucionar saber referencia quitar hay eliminar elimina donde cómo como javascript circular-reference

javascript - una - quitar referencia excel 2016



¿Es la referencia circular entre objetos una mala práctica? (3)

Este tipo de código no causará pérdidas de memoria en los navegadores actuales; como se mencionó en MDN, todos los principales navegadores han estado enviando GCs para marcar y barrer (que pueden manejar ciclos muy bien) por algún tiempo (por ejemplo, Firefox ha tenido un colector de ciclos desde la versión 3).

Desde un punto de vista arquitectónico, este tipo de código introduce un acoplamiento moderadamente estrecho entre los dos objetos (si uno cambia incluso de una manera menor, el otro debe revisarse para determinar si también debe cambiar) y, por lo tanto, debe evitarse si es posible . Pero no hay nada inherentemente malo en ello.

Tengo un modelo que "llevará" (Model.validator) una instancia de validador con él, y necesito que el validador tenga acceso a los atributos del modelo Entonces, lo que he encontrado es el siguiente

var Validator = function(model) { this.model = model; }; var Model = function() { this._attributes = {}; this.validator = new Validator(this); }; var model = new Model();

Este código crea una referencia circular entre esos 2 objetos. ¿Es esta una mala práctica que causará pérdidas de memoria? ¿Alguna otra idea sobre cómo implementarla?

PS He visto tales referencias circulares entre objetos en los ámbitos de Angular.js.


No habrá ningún problema estoy seguro. Los analizadores de JS de la mayoría de los navegadores pueden trabajar con dependencias de ciclo mientras recolectan basura. No hay más problemas potenciales aquí.


No será un problema para la recolección de basura: ¡cualquier recolector de basura nuevo (> IE6) manejará referencias circulares muy bien!

Sin embargo, podría ser un problema si está realizando funciones recursivas o imprimiendo el objeto.

Así que la respuesta es: no hay problema a menos que se jodan :-)