JavaScript - 获取作为特定类实例的所有对象

时间:2017-01-24 09:38:34

标签: javascript

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

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

例如:

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

我想指定班级名称" MyClass"并且得到" obj1,obj2,obj3"作为回应

我该怎么做?

4 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

想象一下这种情况。

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

然后你做了像

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

你会找到你的对象。

希望有所帮助

答案 2 :(得分:0)

只有对构造函数进行了一些修改

示例:

.....
 <plugin>
                <groupId>com.github.kongchen</groupId>
                <artifactId>swagger-maven-plugin</artifactId>
                <version>3.0.1</version>
                <configuration>
                    <apiSources>
                        <apiSource>
                            <springmvc>true</springmvc>
                            <locations>com.yourcontrollers.package.v1</locations>
                            <schemes>http,https</schemes>
                            <host>localhost:8080</host>
                            <basePath>/api-doc</basePath>
                            <info>
                                <title>Your API name</title>
                                <version>v1</version>
                                <description> description of your API</description>
                                <termsOfService>
                                    http://www.yourterms.com
                                </termsOfService>
                                <contact>
                                    <email>your-email@email.com</email>
                                    <name>Your Name</name>
                                    <url>http://www.contact-url.com</url>
                                </contact>
                                <license>
                                    <url>http://www.licence-url.com</url>
                                    <name>Commercial</name>
                                </license>
                            </info>
                            <!-- Support classpath or file absolute path here.
                            1) classpath e.g: "classpath:/markdown.hbs", "classpath:/templates/hello.html"
                            2) file e.g: "${basedir}/src/main/resources/markdown.hbs",
                                "${basedir}/src/main/resources/template/hello.html" -->
                            <templatePath>${basedir}/templates/strapdown.html.hbs</templatePath>
                            <outputPath>${basedir}/generated/document.html</outputPath>
                            <swaggerDirectory>generated/swagger-ui</swaggerDirectory>
                            <securityDefinitions>
                                <securityDefinition>
                                    <name>basicAuth</name>
                                    <type>basic</type>
                                </securityDefinition>
                            </securityDefinitions>
                        </apiSource>
                    </apiSources>
                </configuration>
            </plugin> ........

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

答案 3 :(得分:0)

你可以这样做:

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();