我不确定是否可能,但我会试一下。
在JavaScript中是否可能找到所有特定类的实例对象?
例如:
var obj1 = new MyClass();
var obj2 = new MyClass();
var obj3 = new MyClass();
我想指定类名"MyClass",并在响应中获得"obj1, obj2, obj3"。
我该怎么做?
我不确定是否可能,但我会试一下。
在JavaScript中是否可能找到所有特定类的实例对象?
例如:
var obj1 = new MyClass();
var obj2 = new MyClass();
var obj3 = new MyClass();
function MyClass(){};
MyClass.prototype.test = function(){
console.log('TEST');
};
function MyClassFactory(){
this.instances = [];
};
MyClassFactory.prototype.create = function(){
let tmp = new MyClass();
this.instances.push(tmp);
return tmp;
};
MyClassFactory.prototype.get = function(i){
return this.instances[i];
};
MyClassFactory.prototype.getAll = function(){
return this.instances;
};
let factory = new MyClassFactory();
let obj1 = factory.create();
let obj2 = factory.create();
let obj3 = factory.create();
let test1 = factory.get(0);
let test2 = factory.getAll();
for(let t of test2){
t.test();
}
test1.test();
MyClass
类的对象。var objects = [new MyClass(), new MyClass(), new MyClass()];
function getObjectsOfClass(objects, clazz) {
var objArr = [];
for (var i = 0; i < objects.length; i++) {
if (objects[i] instanceof clazz) {
objArr.push(objects[i];
}
}
return objArr;
}
想象一下这种情况。
function M(){}
var m = new M();
然后你可以做类似这样的事情
for(let f in window){ if(window[f] instanceof M){console.log("founded"+f);}}
你会找到你的对象。
希望这有所帮助。
只有在对构造函数进行了一些修改后才能这样做。
例如:
var MyClassInstances = [];
var MyClass = function() { //constructor
MyClassInstances.push(this); //push the new instance
}
就是这样!但要注意可能会导致内存泄漏。因此,当对象不再需要时,必须从MyClassInstances中删除引用。
MyClass.allInstances = []; MyClass.allInstances.push(this);
不要忘记在某个时候移除它们,否则当创建了大量对象时,会出现内存问题。 - Syntax Error