2011-12-30 26 views
1

是否有一種方法來計算在mootools中創建和銷燬的對象的數量?控制在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數組正確地更新一個?

任何幫助將不勝感激。

謝謝!

回答

0

您可以使用Events類作爲一個mix-in,這樣它會通知動物死亡的工廠......

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/

這是試圖保持索引/陣列的長度保持不變的情況下保存它們

+0

嘿,這是一個很好的答案!我知道fireEvent,但那些行: this.fireEvent(「摧毀」,這個); //通知實例 和 this.add(新動物({ 的onDestroy:this.deleteA.bind(本) })); 是我的關鍵。 謝謝! – 2011-12-30 13:13:33

相關問題