Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
什么会导致JavaScript中的内存损坏?_Javascript_Memory Corruption - Fatal编程技术网

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

什么会导致JavaScript中的内存损坏?,javascript,memory-corruption,Javascript,Memory Corruption,我正在开发一个应用程序,它使用TinyMCE编辑器允许用户修改内容。我开发了一个Prototype.js类,在初始化时,该类生成一个唯一的ID,并使用该ID在上创建一个TinyMCE编辑器。以下是一些相关代码: Region = Class.create( { initialize: function(options) { this._editorReady = false; this._index = Region.nextIndex++; this._uid

我正在开发一个应用程序,它使用TinyMCE编辑器允许用户修改内容。我开发了一个Prototype.js类,在初始化时,该类生成一个唯一的ID,并使用该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;
  },
在很多地方,我会参考
区域的
uid()
,例如,当TinyMCE编辑器中发生事件时(例如,选择更改),我的处理程序将获得编辑器的ID。我会经常做:

var index = Region.instances.invoke('uid').indexOf(uid);
要查找实际的
区域
实例,以反映发生事件的接口

我只设置过任何给定
区域的
\u uid
属性一次。我确信这一点

但在Firefox9.0.1中,我看到了非常奇怪的行为。当事件触发时,无法找到它们所触发的编辑器,因为上面代码中的
索引
-1
。在Firebug中检查后,我看到:

这些是我的代码中的调试消息,记录各种事情(本例中的区域高度)以及区域的
this.uid()
内存似乎已损坏您甚至可以看到它发生在哪里,第一个带圆圈的日志条目是正确的,而后面的条目是错误的

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

为了进一步检查,我在Firebug控制台中运行了以下命令:

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

那对我来说毫无意义。在JavaScript中,什么会导致这样的内存损坏?我该如何对这种情况进行故障排除?

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


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

如果你想问我任何问题,我就在这里!顺便问一下,这个“com.digitalfruction.Customizer.TypeRegion”的东西是从哪里来的?它是纯JavaScript对象吗?@dyoo对不起,不清楚,是吗?:)这是我的代码示例中的区域对象;我只是为了我的问题缩短了代码。您是否尝试过停用任何和所有插件/插件/扩展?是否在单独的用户帐户/其他计算机中尝试?这不应该发生在纯JS=/我肯定没有编码已经改变。。。好主意!而且,在创建对象之后肯定会发生损坏。这些日志消息发生在对象创建之后,您甚至可以在我显示的屏幕截图中看到三个不同的值。所以他们后来就变了。您是否在Chrome中测试过,确认这只是Firefox的问题?除了Prototype.js和TinyMCE之外,还有其他库吗?也许值得在Firefox中玩一下,看看你们是否能得到类似的结果。另外,尝试硬编码一小部分对象,看看它们是否仍然损坏。从一个乔希到另一个…:)我认为你能做的最好的事情就是开始剥下几层,直到你能得到最小的复制。TinyMCE控件看起来相当复杂,所以似乎有一个bug在那里的某个地方。