首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >销毁对象

销毁对象
EN

Stack Overflow用户
提问于 2014-04-25 02:05:44
回答 1查看 69关注 0票数 0

有一个很好的富文本编辑器Scribe。在我的应用程序中,我在一个页面上有多个可编辑的div,在每个特定div上的focus事件中,我希望使用Scribe将这个div转换为可编辑模式。然而,在blur事件中,我想销毁Scribe的实例,因为每个div都有单独的实例,这会消耗大量的内存。

这是我的AMD模块,它将Scribe实例附加到给定的DOM元素:

代码语言:javascript
复制
define(['scribe'], function (Scribe) {

    'use strict';

    function init(element) {
        var scribe = new Scribe(element, { allowBlockElements: true });
        //...    
    }

    return {
        attachEditor: init
    };
});

这是一段使用上述模块的代码:

代码语言:javascript
复制
$('.editable').focus(function(e) {
  editorModule.attachEditor(e.target);
});

现在我不知道如何分离或销毁现有的Scribe实例。我尝试使用以下代码:

代码语言:javascript
复制
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实例。

你知道怎么处理这事吗?

EN

回答 1

Stack Overflow用户

发布于 2014-04-25 02:31:04

您不需要自己删除对象。如果将引用它的所有变量都设置为null,它将被自动删除。这个对象很可能还在那里,因为在代码中的某个地方还有对它的其他引用。如果找不到其他引用,可以将其设置为空对象,然后将scribe设置为null,如下所示:

代码语言:javascript
复制
function destroy() {
   for(var i in scribe)
   {
       delete scribe[i];
   }
   scribe = null;
}

这至少会释放一些内存。真正摆脱它的唯一方法是将引用它的所有变量都设置为null

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23276523

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档