【问题标题】:JavaScript - Get all objects that are instances of a specific classJavaScript - 获取作为特定类实例的所有对象
【发布时间】:2017-06-09 01:08:05
【问题描述】:

我不确定这是否可能,但我会试试运气。

是否可以在 JavaScript 中找到作为特定类实例的所有对象?

例如:

var obj1 = new MyClass();
var obj2 = new MyClass();
var obj3 = new MyClass();

我想指定类名“MyClass”并得到“obj1,obj2,obj3”作为响应

我该怎么做?

【问题讨论】:

标签: javascript


【解决方案1】:

你可以这样做:

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 是第 3 方库而我无权访问它怎么办?
  • 没关系。只需编写工厂代码。在示例中您唯一需要更改的是 create 方法。在那里,您必须添加正确初始化对象所需的参数。
  • 如果您能告诉大家您正在使用的第 3 方库,那就太好了。
【解决方案2】:

据我所知,这是行不通的。您可以将对象保存在一个数组中并对其进行迭代以检索 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;
}

【讨论】:

  • 如果 MyClass 是第 3 方库而我无权访问它怎么办?
  • 您始终需要访问课程。还应该如何实例化该类?也许这个link 也有帮助。
【解决方案3】:

想象一下这种情况。

function M(){}
var m = new M();

然后你会做类似的事情

for(let f in window){ if(window[f] instanceof M){console.log("founded"+f);}}

你会找到你的对象。

希望有帮助

【讨论】:

  • 如果对象在全局范围之外被实例化怎么办?
  • 显然,这行不通。那是一个例子。但是,您可以创建一个接受范围作为参数的函数。
  • 我觉得执行起来会非常昂贵。像这样遍历 Window 对象是公平的做法吗?
【解决方案4】:

只有对构造函数进行了一些修改才能实现

示例:

var MyClassInstances = [];
var MyClass = function() { //constructor
   MyClassInstances.push(this); //push the new instance
}

就是这样!但请注意,它可能会成为内存泄漏。因此,当不需要对象时,您必须从 MyClassInstances 中删除引用。

【讨论】:

  • 如果 MyClass 是第 3 方库而我无权访问它怎么办?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-10-31
  • 1970-01-01
  • 1970-01-01
  • 2013-07-13
  • 1970-01-01
  • 1970-01-01
  • 2017-06-07
相关资源
最近更新 更多