6
获取对象的原型很容易,但是有什么方法可以获得具有特定原型的所有实例吗?我可以在JavaScript中获取原型的所有实例吗?
事情是这样的:
var allAnimals = Animal.prototype.getInstances();
人们可以编写自定义代码保持实例化对象的轨道,但我很感兴趣,是否有这方面的任何内置的方法。
获取对象的原型很容易,但是有什么方法可以获得具有特定原型的所有实例吗?我可以在JavaScript中获取原型的所有实例吗?
事情是这样的:
var allAnimals = Animal.prototype.getInstances();
人们可以编写自定义代码保持实例化对象的轨道,但我很感兴趣,是否有这方面的任何内置的方法。
你可以得到对窗口中创建这样
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;
};
}();
可以在A.instances
后
var one = new A(10), two=new A('123');
尝试这样的事情
function A(f){
this.field = f;
A.instances.push(this);
}
A.instances = [];
因此将包含两个创建的对象
你必须明确地做它的类。类不会自动维护所有实例的列表。 – Barmar
这是内存泄漏。 – SLaks
您可以拍摄堆快照(v8让你这样做),然后检查。理想情况下,您只需在基础构造函数中实现对象跟踪。 –