有一个很好的富文本编辑器Scribe。在我的应用程序中,我在一个页面上有多个可编辑的div,在每个特定div上的focus事件中,我希望使用Scribe将这个div转换为可编辑模式。然而,在blur事件中,我想销毁Scribe的实例,因为每个div都有单独的实例,这会消耗大量的内存。
这是我的AMD模块,它将Scribe实例附加到给定的DOM元素:
define(['scribe'], function (Scribe) {
'use strict';
function init(element) {
var scribe = new Scribe(element, { allowBlockElements: true });
//...
}
return {
attachEditor: init
};
});这是一段使用上述模块的代码:
$('.editable').focus(function(e) {
editorModule.attachEditor(e.target);
});现在我不知道如何分离或销毁现有的Scribe实例。我尝试使用以下代码:
define(['scribe'], function (Scribe) {
'use strict';
var scribe;
function init(element) {
scribe = new Scribe(element, { allowBlockElements: true });
//...
}
function destroy() {
scribe = null;
}
return {
attachEditor: init,
detachEditor: destroy,
};
});希望将null赋值给变量会告诉GC删除该对象。我怀疑这是一个好方法--当我在Chrome中拍摄内存快照时,我仍然可以看到Scribe实例。
你知道怎么处理这事吗?
发布于 2014-04-25 02:31:04
您不需要自己删除对象。如果将引用它的所有变量都设置为null,它将被自动删除。这个对象很可能还在那里,因为在代码中的某个地方还有对它的其他引用。如果找不到其他引用,可以将其设置为空对象,然后将scribe设置为null,如下所示:
function destroy() {
for(var i in scribe)
{
delete scribe[i];
}
scribe = null;
}这至少会释放一些内存。真正摆脱它的唯一方法是将引用它的所有变量都设置为null。
https://stackoverflow.com/questions/23276523
复制相似问题