1

英語で申し訳ありませんが、私はフランス語です :) 「Slider」という名前の Mootools クラスを作成しました。このクラスには、DIV 要素である「slider_element」属性があります。クラスには「destroyer」メソッドもあります。このメソッドは、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);

(実際には、これは簡略化されたコードであるため、コード全体を邪魔することはありません)

4

1 に答える 1

0

JavaScript でオブジェクトを明示的に破棄する方法はありません。あなたができる最善の方法は、それへのすべての参照を削除し、JavaScript 実装がメモリを再利用することを期待することです。

したがって、原則として、(mySlider例のように)参照をnull. しかし、たとえば (イベントに使用されるような) クロージャーでは、制御できない「暗黙の」参照が簡単に存在する可能性があります。前に、他のオブジェクトを参照するプロパティを「一掃」することで、ガベージ コレクターを助けることができる場合があります。ただし、参照がどこかに残っていて、何かがそれらのプロパティを使用しようとしても、悪いことが起こらないようにする必要があります。

要素については、Mootools にはdestroyDOM サブツリー全体を調べて、DOM から要素を削除する前に、すべてのプロパティと、イベント リスナーなどの要素に関連付けられたストレージをクリアするメソッドがあります。

あなたの場合、@Dimitar Christoff が書いたように、Sliderオブジェクトのメソッドを呼び出す外部コードがない場合は、オブジェクトへの参照を に保存する必要はありませんvar mySlider

そうしないと、オブジェクトを存続させる唯一のものは、呼び出しSliderで構築されたクロージャのスタック フレームからの参照です。イベントが発生して呼び出されると、イベント リスナーが削除され、JavaScript エンジンも自由にオブジェクトの割り当てを解除できます。.bind(this)addEventdestroySlider

于 2011-03-28T09:33:44.050 に答える