什么可能导致JavaScript中的内存损坏?

Jos*_*osh 16 javascript memory-corruption

我正在开发一个使用TinyMCE编辑器的应用程序,允许用户修改内容.我开发了一个Prototype.js类,在初始化时,它会生成一个唯一的ID,并在<div>具有该ID的情况下创建一个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;
  },
Run Code Online (Sandbox Code Playgroud)

在很多地方,我会指Regionuid(),例如,当事件TinyMCE的编辑器内发生(例如,选择更改)我的处理程序给出的编辑器的ID.我会经常这样做:

var index = Region.instances.invoke('uid').indexOf(uid);
Run Code Online (Sandbox Code Playgroud)

查找Region反映事件发生的接口的实际实例.

我只设置_uid的任何财产Region,一旦.我很确定这一点.

但是在Firefox 9.0.1中,我看到了非常奇怪的行为.当事件触发时,无法找到他们正在触发的编辑器,因为index在上面的代码中是-1.在Firebug中检查后,我看到了这个:

屏幕捕获奇怪的行为

这些是来自我的代码的调试消息,记录各种事物(在这种情况下区域的高度)以及区域的this.uid()值.内存似乎已损坏!你甚至可以看到它发生的地方,第一个带圆圈的日志条目是正确的,后续的条目是错误的.

相同的代码在Safari和Chrome中运行良好.到目前为止只有Firefox 9.0.1似乎受到影响......

为了进一步检查,我在Firebug控制台中运行了它:

>>> com.digitalfruition.Customizer.TypeRegion.instances.invoke('uid');
["?????????????????eg?????"]
Run Code Online (Sandbox Code Playgroud)

这对我来说毫无意义.什么可能导致JavaScript中的内存损坏?我怎么去解决这种情况呢?

Jos*_*arl 1

您的某个文件是否可能以不同的编码保存?我会看一下,也许还确保您使用正确的编码和 mime 类型来提供文件。

最好在生成值时进行一些测试,console.log()uid确认损坏实际上是在创建对象后发生的。我怀疑它们在创建时就发生了。