控制在MooTools中创建的对象数

时间:2011-12-30 11:37:21

标签: class count mootools factory instances

有没有办法计算在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 :(得分: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/

这是为了保持数组的索引/长度不变,以防你保存它们