1

mootoolsで作成および破棄されたオブジェクトの数を数える方法はありますか?

この場合を想定してください:

var Animal = new Class({ 
    initialize: function(){},
    create: function() {
        alert('created!');
    },
    destroy: function() {
        alert('destroyed');
    }
});

var AnimalFactory = new Class({
    initialize: function() {
        for(i=0;i<10;i++) {
            this.add(new Animal());
        }
    },
    add: function(animal) {
        this.animalsContainer.push(animal);
    },
    delete: function(animal) {
        this.animalsContainer.remove(animal);
    }
});

var animalFactory = new AnimalFactory();

最初に作成した動物の数はわかっていますが、コードのどこかで、具体的な動物インスタンスからの動物破壊関数が呼び出されていると想像してください(コードはここには示されていません)。animalContainer配列を1つ少なくして正しく更新するにはどうすればよいですか?

どんな助けでも大歓迎です。

ありがとう!!

4

1 に答える 1

0

Eventsクラスをミックスインとして使用して、動物の死を工場に通知することができます...

var Animal = new Class({

    Implements: [Events,Options], // mixin

    initialize: function(options){
        this.setOptions(options);
    },
    create: function() {
        alert('created!');
        this.fireEvent("create");
    },
    destroy: function() {
        alert('destroyed');
        this.fireEvent("destroy", this); // notify the instance
    }
});

var AnimalFactory = new Class({
    animalsContainer: [],
    initialize: function() {
        var self = this;
        for(i=0;i<10;i++) {
            this.add(new Animal({
                onDestroy: this.deleteA.bind(this)
            }));
        }
    },
    add: function(animal) {
        this.animalsContainer.push(animal);
    },
    deleteA: function(animal) {
        this.animalsContainer[this.animalsContainer.indexOf(animal)] = null;
        animal = null; // gc
    }
});


var foo = new AnimalFactory();
console.log(foo.animalsContainer[0]);
foo.animalsContainer[0].destroy();
console.log(foo.animalsContainer[0]);

それが実行されるのを見てください:http://jsfiddle.net/dimitar/57SRR/

これは、保存する場合に備えて、配列のインデックス/長さをそのまま維持しようとしています

于 2011-12-30T12:39:40.430 に答える