Obviamente, el código en su forma actual ocuparía más memoria siempre que el elemento DOM aún esté conectado al DOM. Pero supongo que estás preguntando si continuaría usando memoria extra después de que el elemento DOM ya no esté en uso.
actualización: Gracias a la respuesta de Joey (que desde entonces ha suprimido), que pasó algún tiempo leyendo sobre memory leaks in javascript, y parece que mis suposiciones en el párrafo de abajo son incorrectos. Debido a que los elementos DOM no usan la recolección de basura pura, una referencia circular como esta normalmente evitaría que tanto el elemento DOM como el objeto javascript se liberen. Sin embargo, creo que el resto de esta respuesta sigue siendo correcta.
Sin un conocimiento profundo de cómo los motores de JavaScript implementan la recolección de basura, no puedo hablar con autoridad sobre el tema. Sin embargo, mi comprensión general de la recolección de basura me hace pensar que su código sería "seguro" en el sentido de que después de que el elemento de
#something
se retira del DOM, el
MyClass
objeto resultante tendría solamente una referencia a un objeto que no tiene otras conexiones . Los algoritmos de grafos del recolector de basura deben ser capaces de identificar que el elemento DOM y su objeto
MyClass
están "flotando en el espacio" y sin relación con todo lo demás.
Además, jQuery hace todo lo posible para eliminar datos y eventos que están asociados con un elemento DOM determinado una vez que se elimina del DOM. Desde el documentation:
jQuery asegura que los datos se quita cuando los elementos DOM se eliminan a través de métodos jQuery, y cuando el usuario abandona la página.
Así que suponiendo que el uso de jQuery constantemente, sólo tendría una referencia de un solo sentido una vez que el objeto se retira de la DOM de todas formas, lo que hace que sea
que mucho más fácil
posible que el recolector de basura para saber que puede conseguir deshacerse de estos objetos.
De modo que mientras no tenga otra cosa que hacer referencia al objeto MyClass
una vez que se elimine el elemento DOM, no debería tener una pérdida de memoria.
¿Por qué no guarda la referencia en el objeto global js? –
@ant_Ti Me gustaría tener acceso de dos vías. Por ejemplo, en un controlador de eventos me gustaría acceder a 'obj', pero también me gustaría poder acceder al elemento desde' obj'. –
He editado la pregunta para eliminar menciones de referencias circulares, ya que este ejemplo no contiene una. (Aunque parece que podría) – mikerobi