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

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (26)

我正在开发一个应用程序,它使用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;
  },

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

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

查找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����遀"]

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

提问于
用户回答回答于

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

这可能是一个好主意,做一些测试,你console.log()uid价值,因为它们产生的,以确认腐败实际上是发生在创建对象之后。我怀疑它是在创建时发生的。

扫码关注云+社区