用Mootools理解类

时间:2011-03-27 14:30:27

标签: javascript class mootools instance destroy

抱歉我的英文,我是法国人:) 我创建了一个名为“Slider”的Mootools类。 该类有一个“slider_element”属性,它是一个DIV元素。 该班还有一个“驱逐舰”方法。这种方法会破坏DIV元素。

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

下面是我的代码,它按照我想要的图形工作。 我的问题是:当我销毁DIV元素时,我不再需要我的Slider实例(这里是“mySlider”)。但是我的代码会破坏DIV元素,而不是滑块实例。这个例子还存在吗?我想是的。所以我搜索了如何使用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);

(实际上,这是一个简化的代码,所以我不会用我的整个代码打扰你)

1 个答案:

答案 0 :(得分:0)

无法在JavaScript中显式销毁对象。您可以做的最好的方法是删除对它的所有引用,并希望您的JavaScript实现重用内存。

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

对于元素,Mootools具有destroy方法,该方法遍历整个DOM子树,并在从DOM中删除之前清除所有属性以及元素的相关存储,例如事件侦听器。 / p>

在你的情况下,正如@Dimitar Christoff所写,如果你没有任何调用Slider对象上方法的外部代码,你就不需要在var mySlider中保存对它的引用}。

如果你不这样做,唯一让Slider对象保持活着的是来自.bind(this)addEvent中构建的闭包的堆栈框架的引用打电话。当事件触发并调用destroy时,将删除事件侦听器,并且JavaScript引擎也可以自由地释放Slider对象。