2014-02-11 142 views
6

獲取對象的原型很容易,但是有什麼方法可以獲得具有特定原型的所有實例嗎?我可以在JavaScript中獲取原型的所有實例嗎?

事情是這樣的:

var allAnimals = Animal.prototype.getInstances(); 

人們可以編寫自定義代碼保持實例化對象的軌道,但我很感興趣,是否有這方面的任何內置的方法。

+0

你必須明確地做它的類。類不會自動維護所有實例的列表。 – Barmar

+2

這是內存泄漏。 – SLaks

+0

您可以拍攝堆快照(v8讓你這樣做),然後檢查。理想情況下,您只需在基礎構造函數中實現對象跟蹤。 –

回答

0

你可以得到對窗口中創建這樣

var o = []; 
(for i in window) 
{ 
    if(window[i] instanceof Animal) o.push(window[i]); 
} 

但是這個代碼的情況下,並沒有得到它尚未在窗口創建的實例... 你可以Animal創建方法從創建實例,並將其保存在集合中:

+function() { 

     var AnimalInstances = []; 
     Animal = function (flag) { 

      if (!flag) throw new Error("Invalid Instantiation"); 
     }; 
     Animal.Create = function() { 

      var o = new Animal(true); 
      AnimalInstances.push(o); 
      return o; 
     }; 
     Animal.GetInstances = function() { 

      return AnimalInstances; 
     }; 
    }(); 

或:

+function() { 

     var AnimalInstances = []; 
     Animal = function() { 

      AnimalInstances.push(this); 
     } 
     Animal.GetInstances = function() { 

      return AnimalInstances; 
     }; 
    }(); 
0

可以在A.instances

var one = new A(10), two=new A('123'); 

嘗試這樣的事情

function A(f){ 
    this.field = f; 
    A.instances.push(this); 
} 

A.instances = []; 

因此將包含兩個創建的對象

相關問題