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)
在很多地方,我会指Region的uid(),例如,当事件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中的内存损坏?我怎么去解决这种情况呢?
您的某个文件是否可能以不同的编码保存?我会看一下,也许还确保您使用正确的编码和 mime 类型来提供文件。
最好在生成值时进行一些测试,console.log()以uid确认损坏实际上是在创建对象后发生的。我怀疑它们在创建时就发生了。