javascript - 使用 Mootools 理解类

标签 javascript class mootools instance destroy

抱歉我的英语不好,我是法国人:) 我创建了一个名为“Slider”的 Mootools 类。 该类有一个“slider_element”属性,它是一个 DIV 元素。 该类还有一个“destroyer”方法。此方法会破坏 DIV 元素。

slider_element 应该是一个 div,其中包含另一个带有“remove”CSS 类名的 DIV。当我点击“删除DIV”时,我希望调用“destroyer”方法,以便DIV消失。

下面是我的代码,它按照我想要的方式以图形方式工作。 我的问题是:当我销毁 DIV 元素时,我不再需要我的 Slider 实例(此处为“mySlider”)。但我的代码破坏了 DIV 元素,而不是 slider 实例。这个实例还存在吗?我想是的。所以我搜索了如何使用 Mootools 销毁类的实例,但没有找到......所以我认为我做错了事情,即使我的代码以图形方式执行了我想要的操作。请帮忙:)

var Slider = new Class({
    initialize: function(slider_element){
        this.slider_element = slider_element;
        this.slider_element.getElements('*[class="remove"]').addEvent('click', this.destroyer.bind(this));
    },
    destroyer: function(){
    this.slider_element.destroy();
    }   
});
var myElement = $('my_slider');
var mySlider = new Slider(myElement);

(实际上,这是一个简化的代码,这样我就不会用我的整个代码打扰您)

最佳答案

JavaScript 中没有办法显式销毁对象。您能做的最好的事情就是删除对它的所有引用,并希望您的 JavaScript 实现重用内存。

因此原则上您可以使用 null 覆盖任何引用(例如示例中的 mySlider)。但是很容易存在您无法控制的“隐式”引用,例如在闭包中(用于事件)——您可以通过在之前“清除”引用其他对象的任何属性来帮助垃圾收集器扔掉它,但是如果引用在某个地方存在并且某些东西尝试使用这些属性,那么您必须确保不会发生任何不好的情况。

对于元素,Mootools 具有 destroy 方法,该方法会遍历整个 DOM 子树并清除所有属性以及元素的关联存储(例如事件监听器),然后再将其从 DOM 子树中删除。 DOM。

就您的情况而言,正如 @Dimitar Christoff 所写,如果您没有任何调用 Slider 对象上的方法的外部代码,则无需在 var mySlider.

如果您不这样做,保持 Slider 对象处于事件状态的唯一方法是来自由 .bind(this) 构建的闭包的堆栈帧的引用addEvent 调用中。当事件触发并调用 destroy 时,事件监听器将被删除,并且 JavaScript 引擎也可以自由地释放 Slider 对象。

关于javascript - 使用 Mootools 理解类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5449864/

相关文章:

javascript - Ajax 发送多部分/表单数据

c# - 为什么我可以访问在命名空间之外定义的类?

Javascript函数不停止提交

javascript - 如果存在具有特定索引的表行,如何检查 JavaScript?

java - 当我单击 ListView 项目时,如何接收类对象?

python - 在没有mixin的情况下迭代类对象的字典 - python

class - Mootools:使用类选择器时用 anchor 包裹元素

javascript - 如何在开始输入后清空输入字段

javascript - 通过 JavaScript 使(可能是动态加载的)元素可点击,但优先考虑包含在其中的链接

javascript - 在JS中,如何捕获用户自定义函数异步调用抛出的错误?