我正在开发一个应用程序,它使用 TinyMCE 编辑器来允许用户修改内容。我开发了一个 Prototype.js 类,它在初始化时生成一个唯一的 ID 并在 <div>
上创建一个 TinyMCE 编辑器用那个ID。下面是一些相关代码:
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 编辑器中发生事件时(例如,选择更改),我的处理程序将获得编辑器的 ID。我会经常这样做:
var index = Region.instances.invoke('uid').indexOf(uid);
找到实际的Region
反射(reflect)事件发生的接口(interface)的实例。
我只设置了 _uid
任何给定的属性Region
一次。我对此很确定。
但在 Firefox 9.0.1 中,我看到了非常奇怪的行为。当事件触发时,无法找到它们触发的编辑器,因为 index
上面代码中的是-1
.在 Firebug 中检查后,我看到了这个:
这些是来 self 的代码的调试消息,记录了各种内容(在本例中为区域的高度)以及该区域的 this.uid()
值(value)。 内存似乎已损坏!您甚至可以看到它发生的位置,第一个带圆圈的日志条目是正确的,而随后的错误。
相同的代码在 Safari 和 Chrome 中运行良好。到目前为止,似乎只有 Firefox 9.0.1 受到影响...
为了进一步检查,我在 Firebug 控制台中运行了这个:
>>> com.digitalfruition.Customizer.TypeRegion.instances.invoke('uid');
["�ᔮ��蒦ᓤ�瀀魳ᓪ�倀⛺ᓪ�怀�eg����遀"]
这对我来说毫无意义。在 JavaScript 中,什么会导致像这样的内存损坏?我该如何解决这种情况?
最佳答案
是否有可能您的某个文件使用不同的编码保存?我会看一下,也许还可以确保您使用正确的编码和 mime 类型提供文件。
最好在 console.log()
生成 uid
值时进行一些测试,以确认损坏确实发生创建对象后。我怀疑它们是在创建时发生的。
关于javascript - 什么可能导致 JavaScript 中的内存损坏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8996716/