2010-08-20 19 views
11

Me encontré con esta propiedad al leer sobre fugas de memoria de JavaScript. Me informaron que esta propiedad solo se admite en Internet Explorer y es responsable de la referencia circular.JavaScript: ¿Qué es la propiedad Expando?

He intentado marcar y encontré esta propiedad no está disponible en ninguno de los navegadores. ¿Alguien puede ofrecer alguna información sobre esta propiedad y cómo está vinculada a pérdidas de memoria?

Respuesta

3

Creo que te refieres al expando Property ... con un espacio, refiriéndose a la propiedad expando de los objetos. Es:

establece o recupera un valor que indica si se pueden crear variables arbitrarias dentro de un objeto.

6

Simply put expando property es una propiedad que no existe originalmente. En Internet Explorer, si crea dicha propiedad para un elemento DOM, puede terminar con una pérdida de memoria. He aquí un ejemplo:

var div = document.getElementsByTagName('div')[0]; 
div.someProperty = true; // 'someProperty' is an expando property which may introduce a memory leak in IE 

Más información se puede encontrar en el Understanding and Solving Internet Explorer Leak Patterns

+4

Creo que el punto aquí es que las propiedades de expansión que contienen referencias a otros elementos pueden causar fugas, pero no con los tipos de primitivas según su ejemplo. –

11

Vine aquí con la misma pregunta, también después de leer un artículo sobre las pérdidas de memoria. Todavía estaba confundido después de leer las respuestas aquí, así que pensé en compartir mis hallazgos después de investigar un poco más.

Puede ser confuso en JavaScript saber si algo como .expandoProperty es parte del lenguaje o si alguien es inteligente con los nombres de las propiedades.

obj.expandoProperty en el artículo de pérdida de memoria podría haber sido obj.foo. El punto que intentan transmitir usando ".expandoProperty" es que la propiedad no existía originalmente como parte del objeto.

var obj = {myProp: ''}; 
obj.myProp = 'foo'; //myProp is not an expando property 
obj.myNewProp = 'bar'; //myNewProp is an expando property 

Añadir a la mezcla: .expando es un IE establecimiento sólo para que "Establece o un valor que indica si las variables arbitrarias pueden ser creados dentro del objeto." MSDN article

Véase también generalized discussion of expando properties on StackOverflow here.

+4

La pregunta no hizo preguntas sobre fugas de memoria, pero sí tiene esa etiqueta, tan ... Un código como el del ejemplo anterior nunca causará problemas de pérdida de memoria. El problema parece entrar en juego al agregar una propiedad a un elemento DOM que se refiere al mismo elemento DOM. (Tal vez esto sería un problema con cualquier tipo de objeto? IDK Cada discusión que vi en las fugas de memoria y las propiedades/objetos de expansión se centra en los elementos DOM). –

Cuestiones relacionadas