2014-02-11 145 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 = []; 

因此将包含两个创建的对象

相关问题