抱歉我的英语不好,我是法国人:) 我创建了一个名为“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/