Понимание классов с Mootools - PullRequest
1 голос
/ 27 марта 2011

Извините за мой английский, я французский :) Я создал класс Mootools под названием "Slider".Этот класс имеет атрибут «slider_element», который является элементом DIV.У класса также есть метод "разрушителя".Этот метод уничтожает элемент DIV.

Предполагается, что slider_element - это div, который содержит другой DIV с именем класса CSS remove.Когда я нажимаю «удалить 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 голосов
/ 28 марта 2011

Нет способа явно уничтожить объект в JavaScript. Лучшее, что вы можете сделать, это удалить все ссылки на него и надеяться, что ваша реализация JavaScript повторно использует память.

В принципе, вы можете просто перезаписать любые ссылки (например, mySlider в вашем примере) на null. Но могут легко быть «неявные» ссылки, которыми вы не можете управлять, например, в замыканиях (используемых для событий) - вы можете помочь сборщику мусора, «очистив» любые свойства, которые ссылаются на другие объекты, до того, как выбрасывая его, но затем вы должны убедиться, что ничего плохого не произойдет, если ссылка где-нибудь выживет и что-то попытается использовать эти свойства.

Для элементов Mootools имеет метод destroy, который проходит через целое поддерево DOM и очищает все свойства, а также соответствующее хранилище элементов, таких как прослушиватели событий, перед удалением его из DOM.

В вашем случае, как писал @Dimitar Christoff, если у вас нет внешнего кода, который вызывает методы для объекта Slider, вам не нужно сохранять ссылку на него в var mySlider.

И если вы этого не сделаете, единственное, что поддерживает объект Slider, - это ссылка из стекового фрейма замыкания, построенного с помощью .bind(this) в вызове addEvent. Когда происходит событие и вызывается destroy, прослушиватель событий удаляется, и механизм JavaScript также может освободить объект Slider.

...