1

mootools にはデストラクタがありますか? クラスのインスタンスをカウントする静的変数があります。
問題は、インスタンスが破棄されたときに静的変数を更新できないことです。とにかく、デストラクタを拡張して、その変数を更新する可能性はありますか?

4

1 に答える 1

1

これが mootools で行われるのを見たことがありません。通常は、ブラウザのガベージ コレクションを許可するので...

これは決して理想的な解決策ではありません。インスタンスのスコープ (ウィンドウ、その他のオブジェクトなど) を知る必要があります。

ミックスインクラス:

var Destructor = new Class({
    destruct: function(scope) {
        scope = scope || window;
        // find the object name in the scope
        var name = Object.keyOf(scope, this);
        // let someone know
        this.fireEvent && this.fireEvent('destroy');
        // remove instance from parent object
        delete scope[name];
    }
});

次に、必要なクラスで使用します。

var a = new Class({

    Implements: [Events, Options, Destructor],

    initialize: function(options) {
        this.setOptions(options);
        this.hai();
    },

    hai: function() {
        console.log('hai');
    }

});

最後に、イベントがバインドされたクラスのインスタンスを作成しますonDestroy

var instance = new a({
    onDestroy: function() {
        console.log('goodbye cruel world. time to set affairs in order!');
    }
});


instance.destruct();

instance.hai(); // reference error.

私はそれがハックであることを知っていますが、クラスを賢明に破壊し、クリーンアップを行う能力を与えるかもしれません.

于 2012-07-27T08:19:57.540 に答える