Что может вызвать повреждение памяти в JavaScript?

Я разрабатываю приложение, в котором используются редакторы TinyMCE, позволяющие пользователю изменять контент. Я разработал класс Prototype.js, который при инициализации генерирует уникальный идентификатор и создает редактор TinyMCE на

с этим идентификатором. Вот некоторые из соответствующих кодов:

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;
  },

Во многих местах я буду ссылаться на Region uid () , например, когда события происходят в редакторе TinyMCE. (например, при изменении выбора) моим обработчикам дается идентификатор редактора. Я часто делаю следующее:

var index = Region.instances.invoke('uid').indexOf(uid);

Чтобы найти реальный экземпляр Region , отражающий интерфейс, в котором произошли события.

Я только когда-либо устанавливал свойство _uid любого заданного Регион один раз . Я в этом уверен.

Но в Firefox 9.0.1 я наблюдаю действительно странное поведение. Когда срабатывают события, редактор, который они запускают, не может быть найден, потому что индекс в приведенном выше коде равен -1 . После проверки в Firebug я увидел следующее:

Screen Capture of odd behavior

Это отладочные сообщения из моего кода, в которых регистрируются различные вещи (в данном случае высота регионов) вместе со значением региона this.uid () . Похоже, что память повреждена! и вы даже можете увидеть, где это происходит, первая запись в журнале, обведенная кружком, правильная, а последующие неправильные.

Тот же код отлично работает в Safari и Chrome. Пока что, похоже, затронут только Firefox 9.0.1 ...

Для дальнейшего изучения я запустил это в консоли Firebug:

>>> com.digitalfruition.Customizer.TypeRegion.instances.invoke('uid');
["�ᔮ��蒦ᓤ�瀀魳ᓪ�倀⛺ᓪ�怀�eg����遀"]

Это не имеет для меня смысла. Что могло вызвать такое повреждение памяти в JavaScript? Как мне вообще устранить неполадки в такой ситуации?

16
задан Josh 25 January 2012 в 01:14
поделиться