Контроль количества объектов, созданных в MooTools - PullRequest
1 голос
/ 30 декабря 2011

Есть ли способ подсчитать количество объектов, созданных и уничтоженных в 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 Ответ

0 голосов
/ 30 декабря 2011

Вы можете использовать класс 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/

это пытается сохранить индексы / длину массива без изменений на случай, если вы их сохраните

...