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

Find all classes defined in scope of script

本文关键字:定义 脚本 范围内 查找      更新时间:2023-09-26

我得到了一堆javascript文件包含在主html通过简单的

<script src ="script.js"></script> 
<script defer src ="anotherscript.js"></script> 

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

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

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

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

希望的想法:

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

谢谢!

您可以选择前面的script元素,使用fetch()请求script,解析.text()响应,根据分割文本的结果调用window.eval,在for..of循环中迭代数组,使用new运算符调用每个class

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