避免JavaScript dojo中的重复对象

时间:2012-06-25 20:29:53

标签: javascript memory object dojo memory-leaks

我正在创建一个DOM元素的onfocus对象来处理各种后续事件。但是,在元素失去焦点之后,我需要以某种方式破坏对象,以便将来关注元素会创建一个没有引用原始对象的新对象。

现在,我遇到的这个问题是后续点击会创建另一个对象,并且所有函数都会被调用两次。再次点击,三次。等等。下面的代码显示了单击事件和对象创建的示例。

任何帮助都将不胜感激。

    var videoTopicsHandler = DojoOn(videoTopicsInput, 'focus', function(e){ 
        dropKeyPress(this, 'video-topics');
    });
    var dropKeyPress = function(input, ulId, scroll) {
        var handler;

        obj = new dropDownObj(ulId, scroll); 
        obj.attachEvents(obj, handler, input);
    };

2 个答案:

答案 0 :(得分:0)

试试这个:

var obj = null;
var dropKeyPress = function(input, ulId, scroll) {
        var handler;
        if(obj !== null) obj.destroyRecursively();
        obj = new dropDownObj(ulId, scroll); 
        obj.attachEvents(obj, handler, input);
    };

答案 1 :(得分:0)

您可能希望缓存已创建的对象,而不是删除,如果元素重新获得焦点,则可以从缓存中选择它们。优点:速度更快,无需在每次重新聚焦时再生物体并将其摧毁;缺点:未使用的对象将占用内存,但如果你要足够快地进入下一页,或者这些对象的数量很少,并且重新聚焦经常发生,那么你无论如何都需要它们,这可能无关紧要。