查找脚本范围内定义的所有类

时间:2016-11-12 08:33:42

标签: javascript ecmascript-6

我通过简单的

获得了一些主要html中包含的javascript文件
<script src ="script.js"></script> 
<script defer src ="anotherscript.js"></script> 

script.js定义了一系列es6类,如

class TestPong1 { 
  doSomething() {
    // doSomething
  }
}

class TestPong2 { 
  doSomethingElse() {
    // doSomethingElse
  }
}

anotherscript.js应该能够动态查找之前定义的所有类,创建它们并一个接一个地执行这些方法。

不幸的是,我已经遇到了第一个问题:如何获取指定的所有类的名称&#34;以上&#34; anotherscript.js。我尝试了Object.getOwnPropertyNames(this);,它适用于函数,但不适用于类。

想要的想法:

function findAllClassNamesInScope() {
    // ??? should return list of classes in scope. eg ['TestPong1',  'TestPong2']
}

谢谢!

1 个答案:

答案 0 :(得分:-1)

您可以选择上一个script元素,使用fetch()请求script,解析.text()回复,就分割文字的结果调用window.eval,在for..of循环处迭代数组,使用class运算符

调用每个new
let scripts = document.scripts;
let script = scripts[scripts.length - 2];
fetch(script.src)
.then(response => response.text())
.then(script => {
  let classes = script.split(/\s(?=class)/).map(window.eval);
  for (let fn of classes) {
    console.log(fn.name, new fn())
  }
});

plnkr http://plnkr.co/edit/745xXOinKhRkFYPN7nno?p=preview