Estoy desarrollando una aplicación que utiliza los editores TinyMCE para permitir al usuario modificar el contenido. Desarrollé una clase Prototype.js que, al inicializarse, genera una ID única y crea un editor TinyMCE en un <div>
con esa ID. Esto es parte del código correspondiente:¿Qué podría causar daños en la memoria en JavaScript?
Region = Class.create(
{
initialize: function(options)
{
this._editorReady = false;
this._index = Region.nextIndex++;
this._uid = com.digitalfruition.Customizer.TypeRegion.uidPrefix+this._index;
Region.instances.push(this);
this.setupTinyMCE();
},
uid: function()
{
return this._uid;
},
index: function()
{
return this._index;
},
En muchos lugares, me referiré a un Region
's uid()
, por ejemplo, cuando se producen eventos en el editor TinyMCE (por ejemplo, los cambios de selección) mis manejadores reciben la ID del editor. A menudo me haré:
var index = Region.instances.invoke('uid').indexOf(uid);
Para encontrar el real Region
ejemplo que refleja la interfaz de los hechos ocurridos en
yo sólo establece la propiedad de cualquier _uid
dado Region
vez.. Estoy seguro de esto.
Pero en Firefox 9.0.1, estoy viendo un comportamiento realmente extraño. Cuando se desencadenan eventos, no se puede encontrar el editor que están activando porque index
en el código anterior es -1
. Después de inspeccionar en Firebug, vi esto:
Esos son los mensajes de depuración de mi código, registrando varias cosas (la altura de las regiones en este caso) junto con el valor this.uid()
de la región. ¡Parece que la memoria se ha dañado! e incluso puede ver dónde sucede, la primera entrada de registro en un círculo es correcta y las siguientes son incorrectas.
El mismo código funciona bien en Safari y Chrome. Hasta ahora, sólo Firefox 9.0.1 parece ser afectada ...
Para inspeccionar más, me encontré con esto en la consola de Firebug:
>>> com.digitalfruition.Customizer.TypeRegion.instances.invoke('uid');
["�ᔮ��蒦ᓤ�瀀魳ᓪ�倀⛺ᓪ�怀�eg����遀"]
Eso no tiene sentido para mí. ¿Qué podría causar daños en la memoria como este en JavaScript? ¿Cómo puedo solucionar problemas en una situación así?
Estoy en [el chat de JavaScript] (http://chat.stackoverflow.com/rooms/17/javascript) en caso de que quiera hacerme alguna pregunta. – Josh
¿De dónde viene esta cosa de 'com.digitalfruition.Customizer.TypeRegion', por cierto? ¿Es un objeto de JavaScript puro? – dyoo
@dyoo Lo siento, eso no está claro, ¿verdad? :) Ese es el objeto Region en mi muestra de código; Acabo de acortar el código de mi pregunta. – Josh